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
"False"
argparseで、、"F"
およびそれらの小文字の変形を として解析するにはどうすればよいでしょうかFalse
?
ベストアンサー1
より標準的な方法は次の通りだと思います:
command --feature
そして
command --no-feature
argparse
このバージョンをうまくサポートします:
parser.add_argument('--feature', action=argparse.BooleanOptionalAction)
Python < 3.9:
parser.add_argument('--feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)
もちろん、バージョンが本当に必要な場合は、 「タイプ」またはユーザー定義関数として--arg <True|False>
渡すこともできます...ast.literal_eval
def t_or_f(arg):
ua = str(arg).upper()
if 'TRUE'.startswith(ua):
return True
elif 'FALSE'.startswith(ua):
return False
else:
pass #error condition maybe?