假設我有一個簡單的程序,名爲readfile.py
,它使用Python的支持命令行參數。Python argparse:nargs ='?'和可選參數
程序從位置參數input
指定的文件讀取。沒有指定更多的參數,這個程序並不是很令人興奮。它只是從input
讀取並退出。可選參數--output [OUTPUT_FILE]
表示輸入文件應寫入文件。 OUTPUT_FILE
也是可選的。如果未指定,則輸入應寫入default.out
。
設置我的論點解析器是這樣的:
parser = argparse.ArgumentParser(description='Read from a file')
parser.add_argument(
'input',
help='file to read from')
parser.add_argument(
'--output',
nargs='?',
const='default.out',
default=None,
help="""write file to %(metavar)s. If %(metavar)s isn't
specified, write file to %(const)s.""",
metavar='OUTPUT_FILE')
args = parser.parse_args()
return args.file, args.output_file
注意我用default=None
因此,如果--ouput
沒有在命令行上出現,我能察覺它的缺失與無。
其中給出這樣的用法簽名:
usage: readfile.py [-h] [--output [OUTPUT_FILE]] input
該處理的參數如預期,如果我跑
python readfile.py input.in --output somefile.out
或
python readfile.py --output somefile.out input
它設置output
到default.out
如果我跑
python readfile.py input.in --output
,但如果我跑
python readfile.py --output input.in
它抱怨是有參數太少。我認爲argparse對於解釋這種模式非常「聰明」,將input
設置爲input.in
和output
設置爲default.out
。生成的用法甚至表明了這一點。
我錯過了什麼嗎?
誰低估了這個Q值,至少應該在評論中留下建設性的提示。 – cfi