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_bool
dievaluasi menjadi True
. Ini adalah kasus bahkan ketika saya berubah cmd_line
menjadi ["--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 bool
jenis dengan nilai True
atau 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 mendapatkanbool
jenis dengan nilaiTrue
atauFalse
. (Solusi ini memiliki kendala: opsi Anda harus memiliki nilai default.)