假设我有一个名为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没有出现在命令行中,我就可以在没有出现的情况下检测到它的缺失。
它给出了这样的用法签名:usage: readfile.py [-h] [--output [OUTPUT_FILE]] input
如果我运行python readfile.py input.in --output somefile.out
或者python readfile.py --output somefile.out input
如果我运行python readfile.py input.in --output
但如果我跑python readfile.py --output input.in
它抱怨争论太少。我认为argparse足够“聪明”来解释这个模式,将input设置为input.in,将output设置为default.out。生成的用法甚至表明了这一点。
我遗漏了什么吗?