web-dev-qa-db-fra.com

module argparse Comment ajouter des options sans aucun argument?

J'ai créé un script en utilisant argparse.

Le script doit prendre un nom de fichier de configuration en tant qu'option, et l'utilisateur peut spécifier s'il doit exécuter totalement le script ou simplement le simuler.

Les arguments à passer: ./script -f config_file -s ou ./script -f config_file.

C'est ok pour la partie -f config_file, mais cela me demande toujours des arguments pour l'option -s qui est optionnelle et ne devrait pas être suivie d'aucune.

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.

134
philippe

Comme suggéré par Felix Kling utilisez 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
195
jfs

Pour créer une option qui ne nécessite aucune valeur, définissez le action  [docs] à 'store_const', 'store_true' ou 'store_false'.

Exemple:

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