假设我有一个名为
我像这样设置了参数解析器:
请注意,我使用
这将给出以下用法签名:
如果我运行,它会将
readfile.py
的简单程序,它使用Python的argparse
支持命令行参数。该程序从由位置参数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
出现,我可以将其缺失检测为None。这将给出以下用法签名:
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
。生成的用法甚至表明了这一点。
我是不是漏掉了什么?