I would like to use argparse to parse boolean command-line arguments written as “–foo True” or “–foo False”. For example:
my_program --my_boolean_flag False
However, the following test code does not do what I would like:
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)
Sadly, parsed_args.my_bool
evaluates to True
. This is the case even when I change cmd_line
to be ["--my_bool", ""]
, which is surprising, since bool("")
evalutates to False
.
How can I get argparse to parse "False"
, "F"
, and their lower-case variants to be False
?
Advertisement
Answer
This is actually outdated. For Python 3.7+, Argparse now supports boolean args (search BooleanOptionalAction).
The implementation looks like this:
import argparse ap = argparse.ArgumentParser() # List of args ap.add_argument('--foo', default=True, type=bool, help='Some helpful text that is not bar. Default = True') # Importable object args = ap.parse_args()
One other thing to mention: this will block all entries other than True and False for the argument via argparse.ArgumentTypeError. You can create a custom error class for this if you want to try to change this for any reason.