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 bool
loại có giá trị True
hoặ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ộtbool
loại có giá trịTrue
hoặ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.)