使用 argparse 请求 0 或 2 个位置参数?

Bob*_*Gob 5 python argparse

我正在学习 argparse 模块,我想询问 0 或 2 个文件。

parser.add_argument("infile", nargs = {0,2}, type=argparse.FileType('r'))
Run Code Online (Sandbox Code Playgroud)

它应该与:

python prog.py
python prog.py infile1 infile2
Run Code Online (Sandbox Code Playgroud)

但不包括:

python prog.py infile1
python prog.py infile1 infile2 infile3
Run Code Online (Sandbox Code Playgroud)

实际上我使用了 2 个不同的参数“nargs='?'” 我测试

sys.argv == 1 or sys.argv == 3
Run Code Online (Sandbox Code Playgroud)

wim*_*wim 5

我曾经想要这个,发现argparse原生不支持,所以我就这样写了。

#!/usr/bin/env python

import argparse as ap

parser = ap.ArgumentParser(usage='%(prog)s [-h] [a b]\n')
parser.add_argument('ab', 
                    nargs='*', 
                    help='specify 2 or 0 items', 
                    default=['a', 'b'])

args = parser.parse_args()
if len(args.ab) != 2:
    parser.error('expected 2 arguments')

print(args.ab)
Run Code Online (Sandbox Code Playgroud)

请注意,在创建解析器时要覆盖使用消息,否则默认使用消息会产生误导。

  • http://bugs.python.org/issue11354 中有一个提议的补丁,其中“nargs”可以是(几乎)“re”接受的有关参数数量的任何内容。在该用法中,“{0,2}”表示范围,而不是两个端点。 (2认同)