152 votes

module argparse Comment ajouter l'option sans aucun argument?

J'ai créé un script à l'aide de argparse.

Le script a besoin de prendre un nom de fichier de configuration en option, et l'utilisateur peut spécifier s'ils ont besoin de procéder totalement le script ou seulement les simuler.

Les arguments pour être adoptée: ./script -f config_file -s ou ./script -f config_file.

C'est ok pour l'-f config_file partie, mais Il ne cesse de me poser des arguments pour le-s qui est optionnel et ne doit pas être suivie par tous.

J'ai essayé ceci:

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--file')
#parser.add_argument('-s', '--simulate', nargs = '0')
args = parser.parse_args()
if args.file:
    config_file = args.file
if args.set_in_prod:
        simulate = True
else:
    pass

Avec les erreurs suivantes:

File "/usr/local/lib/python2.6/dist-packages/argparse.py", line 2169, in _get_nargs_pattern
nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs)
TypeError: can't multiply sequence by non-int of type 'str'

Et même erreur avec '' au lieu de 0.

217voto

J.F. Sebastian Points 102961

Comme @Felix Kling a suggéré d' utiliser action='store_true':

>>> from argparse import ArgumentParser
>>> p = ArgumentParser()
>>> _ = p.add_argument('-f', '--foo', action='store_true')
>>> args = p.parse_args()
>>> args.foo
False
>>> args = p.parse_args(['-f'])
>>> args.foo
True

92voto

Felix Kling Points 247451

Pour créer une option qui n'a pas besoin de la valeur, définir l' action [docs] pour 'store_const', 'store_true' ou 'store_false'.

Exemple:

parser.add_argument('-s', '--simulate', action='store_true')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X