Saya ingin menggunakan argumen argparse untuk mem-parsing baris perintah boolean yang ditulis sebagai "--foo True" atau "--foo False". Sebagai contoh:
my_program --my_boolean_flag False
Namun, kode tes berikut tidak melakukan apa yang saya inginkan:
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)
Sedihnya, parsed_args.my_booldievaluasi menjadi True. Ini adalah kasus bahkan ketika saya berubah cmd_linemenjadi ["--my_bool", ""], yang mengejutkan, sejak bool("")dievakuasi False.
Bagaimana saya bisa mendapatkan argparse untuk mengurai "False", "F"dan huruf kecil mereka varian untuk menjadi False?
parser.add_argument('--feature', dest='feature', type=lambda x:bool(distutils.util.strtobool(x))) . Ketika opsi ini digunakan, solusi ini akan memastikan booljenis dengan nilai Trueatau False. Ketika opsi tidak digunakan, Anda akan mendapatkan None. ( distutils.util.strtobool(x)dari pertanyaan stackoverflow lainnya )
parser.add_argument('--my_bool', action='store_true', default=False)
parser.add_argument('--feature', dest='feature', default=False, action='store_true'). Solusi ini akan menjamin Anda selalu mendapatkanbooljenis dengan nilaiTrueatauFalse. (Solusi ini memiliki kendala: opsi Anda harus memiliki nilai default.)