web-dev-qa-db-fra.com

Python drapeaux de ligne de commande argparse sans arguments

Comment ajouter un indicateur facultatif à mes arguments de ligne de commande?

par exemple. pour que je puisse écrire

python myprog.py 

ou

python myprog.py -w

J'ai essayé

parser.add_argument('-w')

Mais je viens de recevoir un message d'erreur disant

Usage [-w W]
error: argument -w: expected one argument

ce que je suppose que cela signifie qu’il veut une valeur d’argument pour l’option -w. Comment accepter un drapeau?

Je trouve http://docs.python.org/library/argparse.html plutôt opaque sur cette question.

284
interstar

Comme vous l'avez, l'argument w attend une valeur après -w sur la ligne de commande. Si vous souhaitez simplement basculer un commutateur en définissant une variable True ou False, consultez http://docs.python.org/dev/library/argparse.html #action (spécifiquement store_true et store_false)

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-w', action='store_true')

Edit: Comme le souligne Sven, une valeur par défaut dans ce cas est superflue.

447
Jdog

Ajouter un extrait rapide pour qu'il soit prêt à être exécuté:

Source: myparser.py

import argparse
parser = argparse.ArgumentParser(description="Flip a switch by setting a flag")
parser.add_argument('-w', action='store_true')

args = parser.parse_args()
print args.w

tilisation:

python myparser.py -w
>> True
34
user1767754