Je voudrais utiliser argparse pour analyser les arguments de ligne de commande booléens écrits comme "--foo True" ou "--foo False". Par exemple:
my_program --my_boolean_flag False
Cependant, le code de test suivant ne fait pas ce que je voudrais:
import argparse
parser = argparse.ArgumentParser(description="My parser")
parser.add_argument("--my_bool", type=bool)
cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse(cmd_line)
Malheureusement, parsed_args.my_bool
évalue à True
. C'est le cas même lorsque je change cmd_line
pour être ["--my_bool", ""]
, ce qui est surprenant, car bool("")
évalue à False
.
Comment puis - je obtenir argparse pour analyser "False"
, "F"
et leur minuscules variantes d'être False
?
parser.add_argument('--feature', dest='feature', type=lambda x:bool(distutils.util.strtobool(x)))
. Lorsque l'option est utilisée, cette solution garantit un bool
type avec la valeur True
ou False
. Lorsque l'option n'est pas utilisée, vous obtiendrez None
. ( distutils.util.strtobool(x)
provient d'une autre question de stackoverflow )
parser.add_argument('--my_bool', action='store_true', default=False)
parser.add_argument('--feature', dest='feature', default=False, action='store_true')
. Cette solution vous garantira toujours unbool
type avec une valeurTrue
ouFalse
. (Cette solution a une contrainte: votre option doit avoir une valeur par défaut.)