Đối cờ (tùy chọn bắt đầu với -
hoặc --
) vượt qua trong tùy chọn với cờ. Bạn có thể chỉ định nhiều lựa chọn:
parser.add_argument('-i', '--inputdir', help="Specify the input directory")
Xem name or flags option documentation:
Phương pháp add_argument()
phải biết liệu một đối số tùy chọn, như -f
hoặc --foo
, hoặc một đối số vị trí, giống như một danh sách các tên tập tin, là kỳ vọng. Các đối số đầu tiên được chuyển đến add_argument()
do đó phải là một chuỗi cờ hoặc một tên đối số đơn giản.
Demo:
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-i', '--inputdir', help="Specify the input directory")
_StoreAction(option_strings=['-i', '--inputdir'], dest='inputdir', nargs=None, const=None, default=None, type=None, choices=None, help='Specify the input directory', metavar=None)
>>> parser.print_help()
usage: [-h] [-i INPUTDIR]
optional arguments:
-h, --help show this help message and exit
-i INPUTDIR, --inputdir INPUTDIR
Specify the input directory
>>> parser.parse_args(['-i', '/some/dir'])
Namespace(inputdir='/some/dir')
>>> parser.parse_args(['--inputdir', '/some/dir'])
Namespace(inputdir='/some/dir')
Tuy nhiên, yếu tố đầu tiên cho cần lập luận chỉ là một giữ chỗ. -
và --
tùy chọn là luôn luôn tùy chọn (đó là quy ước dòng lệnh), đối số bắt buộc không bao giờ được chỉ định với các công tắc như vậy. Thay vào đó, trợ giúp dòng lệnh sẽ hiển thị vị trí đặt đối số bắt buộc bằng trình giữ chỗ dựa trên đối số đầu tiên được chuyển đến add_argument()
, được chuyển vào mà không có dấu gạch ngang.
Nếu bạn có để phá vỡ với ước đó và sử dụng một cuộc tranh cãi bắt đầu với -
hoặc --
đó là yêu cầu nào, bạn sẽ phải làm kiểm tra của riêng bạn:
args = parser.parse_args()
if not args.inputdir:
parser.error('Please specify an inputdir with the -i or --inputdir option')
Ở đây parser.error()
method sẽ in thông tin trợ giúp cùng với thông báo lỗi của bạn, sau đó thoát.
Cảm ơn bạn rất nhiều vì đã làm rõ! Tối đánh giá rất cao sự giúp đỡ của bạn. – user3621633
Điều mà tôi không thích, là khi nó in ra sử dụng, nó không in ra '-i' và' --inputdir'. Tôi sẽ muốn việc sử dụng giống như 'usage: [-h] [-i | --inputdir INPUTDIR]'; một cái gì đó để có hiệu lực đó. Có lẽ một cách để làm điều đó là sử dụng 'add_mutually_exclusive_group()', nhưng điều đó có vẻ hơi khó hiểu đối với tôi. Tôi tự hỏi nếu có một cách tốt hơn. – searchengine27
@ searchengine27: bạn phải tùy chỉnh [lớp trình định dạng trợ giúp] (https://docs.python.org/2/library/argparse.html#formatter-class), tôi lo sợ. –