Я б хотів використовувати argparse для розбору бульних аргументів командного рядка, записаних як "--foo True" або "--foo False". Наприклад:
my_program --my_boolean_flag False
Однак наступний тестовий код не робить того, що я хотів би:
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)
Сумно, parsed_args.my_bool
оцінює True
. Це трапляється навіть тоді, коли я змінюсь cmd_line
бути ["--my_bool", ""]
, що дивно, оскільки bool("")
оцінюється False
.
Як я можу отримати argparse розібрати "False"
, "F"
і їх малі варіанти бути False
?
parser.add_argument('--feature', dest='feature', type=lambda x:bool(distutils.util.strtobool(x)))
. Якщо параметр використовується, це рішення забезпечить bool
тип зі значенням True
або False
. Якщо параметр не використовується, ви отримаєте None
. ( distutils.util.strtobool(x)
йдеться з іншого запитання про стакове переповнення )
parser.add_argument('--my_bool', action='store_true', default=False)
parser.add_argument('--feature', dest='feature', default=False, action='store_true')
. Це рішення гарантує, що ви завжди отримаєтеbool
тип зі значеннямTrue
абоFalse
. (Це рішення має обмеження. Ваша опція повинна мати значення за замовчуванням.)