Parsing boolean values with argparse
argparse, boolean, command-line-arguments, python
Solution
Simplest & most correct way is:
from distutils.util import strtobool
parser.add_argument('--feature', dest='feature',
type=lambda x: bool(strtobool(x)))
Do note that True values are y, yes, t, true, on and 1; false values are n, no, f, false, off and 0. Raises ValueError if val is anything else.
Problem
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`?