Tôi muốn sử dụng argparse để phân tích các đối số dòng lệnh boolean được viết là "--foo True" hoặc "--foo Sai". Ví dụ:
my_program --my_boolean_flag False
Tuy nhiên, mã kiểm tra sau không thực hiện được những gì tôi muốn:
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)
Đáng buồn thay, parsed_args.my_boolđánh giá để True. Đây là trường hợp ngay cả khi tôi thay đổi cmd_lineđược ["--my_bool", ""], mà là ngạc nhiên, vì bool("")evalutates tới False.
Làm thế nào tôi có thể nhận được argparse để phân tích "False", "F"và thấp hơn trường hợp của họ biến thể được False?
parser.add_argument('--feature', dest='feature', type=lambda x:bool(distutils.util.strtobool(x))) . Khi tùy chọn được sử dụng, giải pháp này sẽ đảm bảo boolloại có giá trị Truehoặc False. Khi tùy chọn không được sử dụng, bạn sẽ nhận được None. ( distutils.util.strtobool(x)là từ một câu hỏi stackoverflow khác )
parser.add_argument('--my_bool', action='store_true', default=False)
parser.add_argument('--feature', dest='feature', default=False, action='store_true'). Giải pháp này sẽ đảm bảo bạn luôn có được mộtboolloại có giá trịTruehoặcFalse. (Giải pháp này có một ràng buộc: tùy chọn của bạn phải có giá trị mặc định.)