簡體   English   中英

如果提供了可選參數,則需要命令行參數

[英]Requiring a command line argument if an optional argument is provided

我正在嘗試編寫一個腳本,用戶可以從中選擇三個不同的選項:

python foo.py 
python foo.py -a
python foo.py -b address_arg data_arg

如果用戶選擇了最后一個選項,我需要它們為地址和數據提供兩個額外的參數。

我目前有它工作,所以它需要一個參數,比如這里的地址:

parser.add_argument('-b', '--boo', dest='address', type=str, help="Help message")

如果我跑,哪個有效

python foo.py -b 0x00

但是,我如何要求用戶提供數據的第二個參數?

您可以使用nargs=2設置預期參數的數量。

https://docs.python.org/3/library/argparse.html#the-add-argument-method

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-b', '--bar', nargs=2)
_StoreAction(option_strings=['-b', '--bar'], dest='bar', nargs=2, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> args = parser.parse_args(['--bar', 'arg1', 'arg2'])
>>> args.bar
['arg1', 'arg2']
>>> args = parser.parse_args(['--bar', 'arg1'])
usage: [-h] [-b BAR BAR]
: error: argument -b/--bar: expected 2 arguments

請注意,此處顯示的幫助顯示-b BAR BAR ,這有點令人討厭(默認情況下它會重復參數名稱)。 您可以設置metavar一個元組為您需要傳遞兩個參數顯示更好的幫助信息。

>>> parser.add_argument('-f', '--foo', nargs=2, metavar=('desc1', 'desc2'))
_StoreAction(option_strings=['-f', '--foo'], dest='foo', nargs=2, const=None, default=None, type=None, choices=None, help=None, metavar=('desc1', 'desc2'))
>>> parser.print_help()
usage: [-h] [-b BAR BAR] [-f desc1 desc2]

optional arguments:
  -h, --help            show this help message and exit
  -b BAR BAR, --bar BAR BAR
  -f desc1 desc2, --foo desc1 desc2

有關更多信息,請參閱此處: https//docs.python.org/3/library/argparse.html#metavar

您在-baction例程中強制執行額外參數。

在那里,您檢查您期望的data_arg的存在性和有效性。 僅僅為了存在,對參數數量的簡單檢查就可以完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM