Ne pouvez pas obtenir argparse pour lire la chaîne de caractères entre guillemets avec des tirets-t-il?

Est-il un moyen de faire argparse reconnaître quoi que ce soit entre deux guillemets comme un seul argument? Il semble continuer de voir les tirets et en supposant que c'est le début d'une nouvelle option

J'ai quelque chose comme:

mainparser = argparse.ArgumentParser()
subparsers = mainparser.add_subparsers(dest='subcommand')
parser = subparsers.add_parser('queue')
parser.add_argument('-env', '--extraEnvVars', type=str,
                        help='String of extra arguments to be passed to model.')
...other arguments added to parser...

Mais quand je le lance:

python Application.py queue -env "-s WHATEVER -e COOL STUFF"

Il me donne:

Application.py queue: error: argument -env/--extraEnvVars: expected one argument

Si j'ai laisser tomber le premier tableau de bord, il fonctionne tout à fait bien, mais il est essentiel que je sois capable de passer en une chaîne de caractères avec des tirets en elle. J'ai essayé de s'échapper avec \ , ce qui le fait réussir, mais ajoute à la \ de la chaîne d'argument personne Ne sait comment contourner ce problème? Ce qui se passe si ou non -s est un argument dans l'analyseur.

EDIT: je suis à l'aide de Python 2.7.

EDIT2:

python Application.py -env " -env"

fonctionne parfaitement bien, mais

python Application.py -env "-env"

ne pas.

EDIT3: il Semble que ce soit effectivement un bug qui débattu déjà: http://www.gossamer-threads.com/lists/python/bugs/89529, http://python.6.x6.nabble.com/issue9334-argparse-does-not-accept-options-taking-arguments-beginning-with-dash-regression-from-optp-td578790.html. C'est seulement en 2.7 et pas dans optparse.

EDIT4: Le courant rapport de bug est: http://bugs.python.org/issue9334

  • Quelle est la version de Python que vous utilisez?
  • J'utilise Python 2.7.
  • Cela fonctionne très bien pour moi sur Python 2.7. Avez-vous d'autres arguments configuré?
  • Oui, un certain nombre d'entre eux. Aussi, -e est l'argument de l'un des subparsers de mon programme. Je vais poster une information plus complète sur l'extrait de code pour le rendre plus clair.
  • Hm...je suis sûr. Tous mes autres options fonctionnent bien, et extraEnvVars ce qu'il est censé faire aussi longtemps que la chaîne ne commence pas par un tiret. Par exemple, python Application.py la file d'attente -env "-env" fonctionne très bien.
  • BTW, "cité" ici est totalement discutable -- les guillemets sont consommés par le shell avant de argparse (ou l'interpréteur Python) a toute chance de bien qu'ils soient là ou pas.

InformationsquelleAutor sfendell | 2013-04-23