Tôi có một kịch bản mà tôi yêu cầu người dùng cho một danh sách các hành động được xác định trước để thực hiện. Tôi cũng muốn khả năng giả định một danh sách các hành động cụ thể khi người dùng không xác định bất cứ điều gì. tuy nhiên, có vẻ như cố gắng làm cả hai việc này với nhau là không thể.python argparse - tham số chắp thêm tùy chọn với các lựa chọn
khi người dùng không đưa ra lý lẽ, họ nhận được một lỗi mà các lựa chọn mặc định là không hợp lệ
acts = ['clear','copy','dump','lock']
p = argparse.ArgumentParser()
p.add_argument('action', nargs='*', action='append', choices=acts, default=[['dump', 'clear']])
args = p.parse_args([])
>>> usage: [-h] [{clear,copy,dump,lock} [{clear,copy,dump,lock} ...]]
: error: argument action: invalid choice: [['dump', 'clear']] (choose from 'clear', 'copy', 'dump', 'lock')
và khi họ làm định nghĩa một tập các hành động, các namespace kết quả có những hành động của người dùng nối vào mặc định, thay vì thay thế mặc định
acts = ['clear','copy','dump','lock']
p = argparse.ArgumentParser()
p.add_argument('action', nargs='*', action='append', choices=acts, default=[['dump', 'clear']])
args = p.parse_args(['lock'])
args
>>> Namespace(action=[['dump', 'clear'], ['dump']])
Tôi không chắc chắn nếu điều này đã được giải quyết bởi một lỗi tương tự đã được báo cáo: http://bugs.python.org/issue9625. Một cách có thể để xử lý việc này là sử dụng một hành động tùy chỉnh, thay vì từ khóa 'choice'. Xem câu trả lời được chấp nhận về [câu hỏi này] (http://stackoverflow.com/questions/4194948/python-argparse-is-there-a-way-to-specify-a-range-in-nargs) – Chris