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("")
evalutatesへ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
。(このソリューションには制約があります。オプションにはデフォルト値が必要です。)