Python argparse: nargs='?' and optional arguments
假设我有一个名为
程序从位置参数
我的参数分析器设置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 |
注意,我使用
它提供如下使用签名:
1 | usage: readfile.py [-h] [--output [OUTPUT_FILE]] input |
如果我运行
1 | python readfile.py input.in --output somefile.out |
或
1 | python readfile.py --output somefile.out input |
如果我运行的话,它把
1 | python readfile.py input.in --output |
但是如果我跑
1 | python readfile.py --output input.in |
它抱怨争论太少。我认为argparse"足够聪明"来解释这个模式,将
我错过什么了吗?
不,它不会识别这个。在最后一个例子中,您清楚地将
我建议您翻转
这样,您就不必添加
您可以通过"-"来标记任何选项的结尾。例如:
1 | python readfile.py --output -- input |
具有预期效果。但是,将参数设置为——需要输出并允许:
1 | python readfile.py --output - input |
可能更干净。