Python argparse:nargs ='?' 和可选参数
假设我有一个名为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
。 生成的用法甚至表明了这一点。
我错过了什么吗?
不,它不会承认这一点。 你在最后一个例子中明确地将input.in
--output
给--output
。
我会建议你翻转default
和const
参数。 你希望默认是default.out,所以它应该是default='default.out'
。 对于具有空--output
参数的情况, const
可以被设置为其他值。
这样,除非要更改默认值,否则不必添加--output
参数,并且如果要输出到stdout
,则可以使用空的--output
参数。
您可以通过“ - ”标记任何选项的结束。 例如:
python readfile.py --output -- input
具有预期的效果。 但是,要求 - 输出要求并允许:
python readfile.py --output - input
可能更干净。
链接地址: http://www.djcxy.com/p/28553.html