Puis-je utiliser argparse
pour lire les arguments de ligne de commande nommés qui n'ont pas besoin d'être dans un ordre spécifique? J'ai parcouru le documentation mais la plupart se concentrait sur l'affichage du contenu en fonction des arguments fournis (tels que --h
).
En ce moment, mon script lit des arguments ordonnés et sans nom:
myscript.py foo-val bar-val
en utilisant sys.argv
:
foo = sys.argv[1]
bar = sys.argv[2]
Mais je voudrais changer l'entrée afin qu'elle soit agnostique par ordre en nommant les arguments:
myscript.py --bar = bar-val --foo = foo-val
Vous pouvez utiliser Arguments facultatifs comme ceci:
import argparse, sys
parser=argparse.ArgumentParser()
parser.add_argument('--bar', help='Do the bar option')
parser.add_argument('--foo', help='Foo the program')
args=parser.parse_args()
print args
print sys
Ensuite, si vous l'appelez avec ./prog --bar=bar-val --foo foo-val
il imprime:
Namespace(bar='bar-val', foo='foo-val')
['Untitled 14.py', '--bar=bar-val', '--foo', 'foo-val']
Ou, si l'utilisateur veut de l'aide, argparse le construit aussi:
$ ./prog -h
usage: Untitled 14.py [-h] [--bar BAR] [--foo FOO]
optional arguments:
-h, --help show this help message and exit
--bar BAR Do the bar option
--foo FOO Foo the program
La réponse est oui . Un rapide coup d'œil à la documentation argparse aurait également répondu.
Voici un exemple très simple, argparse est capable de gérer des besoins bien plus spécifiques.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', '-f', help="a random options", type= str)
parser.add_argument('--bar', '-b', help="a more random option", type= int, default= 0)
print(parser.format_help())
# usage: test_args_4.py [-h] [--foo FOO] [--bar BAR]
#
# optional arguments:
# -h, --help show this help message and exit
# --foo FOO, -f FOO a random options
# --bar BAR, -b BAR a more random option
args = parser.parse_args("--foo pouet".split())
print(args) # Namespace(bar=0, foo='pouet')
print(args.foo) # pouet
print(args.bar) # 0
Bien sûr, dans un vrai script, vous ne coderez pas en dur les options de ligne de commande et appellerez à la place parser.parse_args()
(sans argument). Cela fera argparse prendre la liste sys.args
Comme arguments de ligne de commande.
Vous pourrez appeler ce script de cette façon:
test_args_4.py -h # prints the help message
test_args_4.py -f pouet # foo="pouet", bar=0 (default value)
test_args_4.py -b 42 # foo=None, bar=42
test_args_4.py -b 77 -f knock # foo="knock", bar=77
Vous découvrirez de nombreuses autres fonctionnalités en lisant la doc;)