2011-05-20 1 views
2

Y at-il un moyen que je peux configurer optparse en python pour ne pas prendre le début -? Ainsi, au lieu deoptparse en python

%program -d optionvalue 

je reçois

%program d optionvalue 

Actuellement, lorsque je tente de faire

parser.add_option('d', '--database') 

je reçois l'erreur suivante:

optparse.OptionError: invalid option string 'd': must be at least two characters long 

Toute aide serait apprécié! Merci

+1

Pourquoi voulez-vous faire cela? C'est une rupture de convention. Comment allez-vous faire la distinction entre l'argument 'd' et la valeur' d'? (par exemple 'programme dd') – jathanism

Répondre

6

En bref, non.

an argument used to supply extra information to guide or customize the execution of a program. There are many different syntaxes for options; the traditional Unix syntax is a hyphen (“-“) followed by a single letter, e.g. -x or -F. Also, traditional Unix syntax allows multiple options to be merged into a single argument, e.g. -x -F is equivalent to -xF. The GNU project introduced -- followed by a series of hyphen-separated words, e.g. --file or --dry-run. These are the only two option syntaxes provided by optparse.

http://docs.python.org/library/optparse.html#terminology

Vous devrez analyser vous-même.

+0

Oui, semble que même 'XX' ne fonctionne pas car j'obtiens l'erreur suivante: optparse.OptionError: chaîne d'option courte invalide 'dd': doit être de la forme -x, (x toute non -dash char) – amplenerd

+3

+1 pour citer la documentation python et pour la tradition unix. – WirthLuce

1

parse_args() vous permet de fournir votre propre liste d'arguments, et pas seulement en utilisant sys.argv[1:], qu'il utilise par défaut. Vous pouvez donc pré-traiter les arguments de la ligne de commande, puis les transmettre à optargs. En supposant que vous voulez que tous les arguments 1 caractères pour compter comme des touches d'option:

orig_args = sys.argv[1:] 
new_args = [] 
for arg in orig_args: 
    if len(arg) == 1: 
     arg = '-' + arg 
    new_args.append(arg) 

(options, args) = parser.parse_args(new_args) 

(vous pouvez aussi sous-classe OptionParser et le mettre là-bas)

Questions connexes