我使用argparse包来解析命令行参数。现在我想准确接受0,1或2个字符串并将它们放入列表中。
我目前的方法如下:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('strs', nargs='*')
print(parser.parse_args([]).strs)
print(parser.parse_args(['AAA']).strs)
print(parser.parse_args(['AAA', 'BBB']).strs)
print(parser.parse_args(['AAA', 'BBB', 'CCC']).strs)
对于第1,第2和第3 parse_args()
,结果是预期的。对于最后一个,我目前的方法是if len(parse_args.strs) > 2: raise
。有没有更好的方法可以让argparse检查我?
答案 0 :(得分:1)
argparse
无法接受一系列nargs
,只有1
,2
,'+'
,{{1}等值}}
您可以编写一个自定义'*'
类来检查Action
传递它的值的数量。但我认为解析后执行该测试同样容易。
我可以找到一个错误/问题,探讨添加范围nargs='*'
选项,如果你真的想进入它。
如果您没有其他位置,则可以定义3个位置,其中2个位置为nargs
。您甚至可以将它们组合成一个具有通用名称和“追加”操作的列表。我会探索那个。
?
得到In [573]: p=argparse.ArgumentParser()
In [574]: p.add_argument('str',action='append')
In [575]: p.add_argument('str',nargs='?',action='append')
In [576]: p.add_argument('str',nargs='?',action='append')
In [577]: p.print_help()
usage: ipython3 [-h] str [str] [str]
positional arguments:
str
str
str
optional arguments:
-h, --help show this help message and exit
In [578]: p.parse_args('1 2 3'.split())
Out[578]: Namespace(str=['1', '2', '3'])
In [579]: p.parse_args('1 3'.split())
Out[579]: Namespace(str=['1', '3', None])
In [580]: p.parse_args('1'.split())
Out[580]: Namespace(str=['1', None, None])
Nones。我可以用
default
(哎呀,这是用1-3参数编码的,但是你明白了。)