"--Foo True" veya "--foo False" olarak yazılan boolean komut satırı argümanlarını ayrıştırmak için argparse kullanmak istiyorum. Örneğin:
my_program --my_boolean_flag False
Ancak, aşağıdaki test kodu ne istediğini yapmaz:
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)
Ne yazık ki, parsed_args.my_bool
değerlendirir True
. Bu benim değiştirseniz bile böyledir cmd_line
olmak ["--my_bool", ""]
beri, şaşırtıcı olan, bool("")
hiç evalutates False
.
Nasıl ayrıştırmak için argparse alabilirsiniz "False"
, "F"
ve onların küçük harf olmak varyantları False
?
parser.add_argument('--feature', dest='feature', type=lambda x:bool(distutils.util.strtobool(x)))
. Seçenek kullanıldığında, bu çözüm veya bool
değeri olan bir tür sağlayacaktır . Seçenek kullanılmadığında elde edersiniz . ( başka bir 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')
. Bu çözüm her zaman bir almak GARANTYSY olacakbool
değerle türünüTrue
veyaFalse
. (Bu çözümün bir kısıtlaması vardır: seçeneğiniz varsayılan bir değere sahip olmalıdır.)