【发布时间】:2012-12-02 05:56:30
【问题描述】:
假设我有一个名为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。生成的用法甚至暗示了这一点。
我错过了什么吗?
【问题讨论】:
-
谁对这个 Q 投了反对票,至少应该在评论中留下建设性的暗示。