ฉันต้องการใช้ 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)มาจากคำถาม stackoverflow อื่น )
parser.add_argument('--my_bool', action='store_true', default=False)
parser.add_argument('--feature', dest='feature', default=False, action='store_true')คำตอบของ การแก้ปัญหานี้จะรับประกันคุณเคยได้รับboolชนิดที่มีค่าหรือTrueFalse(โซลูชันนี้มีข้อ จำกัด : ตัวเลือกของคุณจะต้องมีค่าเริ่มต้น)