La documentation pour la argparse module python, bien qu'excellente, je suis sûr, c'est trop pour mon petit débutant cerveau à saisir dès maintenant. De même pour de nombreuses questions ici sur la pile. Je n'ai pas besoin de faire des maths sur la ligne de commande ou de s'intéresser à la mise en forme des lignes sur l'écran ou modifier une option caractères. Tout ce que je veux faire, c'est "si arg est Un, faire cela, si B ne font que, si aucune de ce qui précède afficher l'aide et quitter".
Réponses
Trop de publicités?Ma compréhension de la question d'origine est double. Tout d'abord, en termes de la plus simple possible argparse exemple, je suis surpris que je n'en ai pas vu ici. Bien sûr, pour être très simple, c'est aussi tous les frais avec peu de puissance, mais il pourrait vous aider à démarrer.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("a")
args = parser.parse_args()
if args.a == 'magic.name':
print 'You nailed it!'
Mais cette position argument est maintenant nécessaire. Si vous le laissez sortir lors de l'invocation de ce programme, vous recevrez un message d'erreur sur les arguments manquants. Cela m'amène à la deuxième partie de la question d'origine. Matt Wilkie semble vouloir qu'une seule option argument sans un nom d'étiquette (l'option --étiquettes). Ma suggestion serait de modifier le code ci-dessus comme suit:
...
parser.add_argument("a", nargs='?', default="check_string_for_empty")
...
if args.a == 'check_string_for_empty':
print 'I can tell that no argument was given and I can deal with that here.'
elif args.a == 'magic.name':
print 'You nailed it!'
else:
print args.a
Il y a peut-être une solution plus élégante, mais cela fonctionne et est minimaliste.
L' argparse
documentation est assez bonne, mais laisse quelques détails utiles qui pourrait ne pas être évident. (@Diego Navarro déjà parlé de cela, mais je vais essayer de développer sa réponse légèrement.) Utilisation de base est comme suit:
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--my-foo', default='foobar')
parser.add_argument('-b', '--bar-value', default=3.14)
args = parser.parse_args()
L'objet que vous recevez à partir de parse_args()
est un " espace de Noms de l'objet: Un objet dont les variables membres sont nommés d'après vos arguments de ligne de commande. L' Namespace
objet est la façon dont vous accédez à vos arguments et les valeurs qui leur sont associés:
args = parser.parse_args()
print args.my_foo
print args.bar_value
(À noter qu' argparse
remplace '-' dans votre argumentation noms avec des caractères de soulignement dans le nom des variables.)
Dans de nombreuses situations, vous pouvez utiliser des arguments tout simplement que les drapeaux qui ne permet pas de valeur. Vous pouvez les ajouter dans argparse comme ceci:
parser.add_argument('--foo', action='store_true')
parser.add_argument('--no-foo', action='store_false')
Le ci-dessus va créer des variables nommées 'foo' avec la valeur True, et "no_foo' avec la valeur False, respectivement:
if (args.foo):
print "foo is true"
if (args.no_foo is False):
print "nofoo is false"
Notez également que vous pouvez utiliser le bouton "obligatoire" lors de l'ajout d'un argument:
parser.add_argument('-o', '--output', required=True)
De cette façon, si vous omettez cet argument sur la ligne de commande argparse
va vous dire qu'il en manque et arrêter l'exécution de votre script.
Enfin, notez qu'il est possible de créer un dict structure de vos arguments à l'aide de l' vars
de la fonction, si cela rend la vie plus facile pour vous.
args = parser.parse_args()
argsdict = vars(args)
print argsdict['my_foo']
print argsdict['bar_value']
Comme vous pouvez le voir, vars
renvoie un dict avec vos noms d'argument que les clés et leurs valeurs, er, des valeurs.
Il y a beaucoup d'autres options et d'autres choses que vous pouvez faire, mais cela devrait couvrir l'essentiel, le commun des scénarios d'utilisation.
Matt est de poser des questions sur les paramètres positionnels dans argparse, et je suis d'accord que la documentation Python est absente sur cet aspect. Il n'y a pas un seul exemple complet dans les ~20 pages impaires qui montre à la fois l'analyse et à l'aide de paramètres positionnels.
Aucune des autres réponses ici montrent un exemple complet de paramètres positionnels, donc voici un exemple complet:
# tested with python 2.7.1
import argparse
parser = argparse.ArgumentParser(description="An argparse example")
parser.add_argument('action', help='The action to take (e.g. install, remove, etc.)')
parser.add_argument('foo-bar', help='Hyphens are cumbersome in positional arguments')
args = parser.parse_args()
if args.action == "install":
print "You asked for installation"
else:
print "You asked for something other than installation"
# The following do not work:
# print args.foo-bar
# print args.foo_bar
La chose qui m'a jeté, c'est que argparse va convertir l'argument nommé "--foo-bar" en "foo_bar", mais un paramètre de position nommé "foo-bar" le reste "foo-bar", le rendant de moins en moins évident de savoir comment l'utiliser dans votre programme.
Notez les deux lignes à la fin de mon exemple), ni de ceux qui vont travailler pour obtenir la valeur de la foo-bar de position param. Le premier est évidemment faux (c'est une expression arithmétique args.foo moins bar), mais le deuxième ne fonctionne pas non plus:
AttributeError: 'Namespace' object has no attribute 'foo_bar'
Voici comment l'exemple ci-dessus fonctionne:
$ python test.py
usage: test.py [-h] action foo-bar
test.py: error: too few arguments
$ python test.py -h
usage: test.py [-h] action foo-bar
An argparse example
positional arguments:
action The action to take (e.g. install, remove, etc.)
foo-bar Hyphens are cumbersome in positional arguments
optional arguments:
-h, --help show this help message and exit
$ python test.py install foo
You asked for installation