Chciałbym użyć argparse do analizy argumentów wiersza poleceń boolean zapisanych jako „--foo True” lub „--foo False”. Na przykład:
my_program --my_boolean_flag False
Jednak poniższy kod testowy nie robi tego, co chciałbym:
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)
Niestety parsed_args.my_bool
ocenia True
. Jest tak nawet w przypadku, kiedy zmieni cmd_line
się["--my_bool", ""]
, co jest zaskakujące, ponieważ bool("")
evalutates do False
.
Jak mogę uzyskać argparse do analizowania "False"
, "F"
a ich małymi literami warianty być False
?
parser.add_argument('--feature', dest='feature', type=lambda x:bool(distutils.util.strtobool(x)))
. Gdy zostanie użyta opcja, to rozwiązanie zapewni bool
typ o wartości True
lub False
. Gdy opcja nie zostanie użyta, otrzymasz None
. ( distutils.util.strtobool(x)
pochodzi z innego pytania dotyczącego
parser.add_argument('--my_bool', action='store_true', default=False)
parser.add_argument('--feature', dest='feature', default=False, action='store_true')
. To rozwiązanie zagwarantuje, że zawsze otrzymaszbool
typ o wartościTrue
lubFalse
. (To rozwiązanie ma ograniczenie: twoja opcja musi mieć wartość domyślną.)