Ich möchte argparse verwenden, um boolesche Befehlszeilenargumente zu analysieren, die als "--foo True" oder "--foo False" geschrieben sind. Zum Beispiel:
my_program --my_boolean_flag False
Der folgende Testcode macht jedoch nicht das, was ich möchte:
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)
Leider parsed_args.my_bool
bewertet zu True
. Dies ist auch dann der Fall, wenn ich mich cmd_line
zu bin ["--my_bool", ""]
, was überraschend ist, da es sich um eine bool("")
Bewertung handelt False
.
Wie kann ich argparse zu analysieren "False"
, "F"
und ihre unteren Gehäusevarianten zu sein False
?
parser.add_argument('--feature', dest='feature', type=lambda x:bool(distutils.util.strtobool(x)))
. Wenn die Option verwendet wird, stellt diese Lösung einen bool
Typ mit dem Wert von True
oder sicher False
. Wenn die Option nicht verwendet wird, erhalten Sie None
. ( distutils.util.strtobool(x)
ist aus einer anderen Stackoverflow-Frage )
parser.add_argument('--my_bool', action='store_true', default=False)
parser.add_argument('--feature', dest='feature', default=False, action='store_true')
. Diese Lösung garantiert, dass Sie immer einenbool
Typ mit WertTrue
oder erhaltenFalse
. (Diese Lösung hat eine Einschränkung: Ihre Option muss einen Standardwert haben.)