完全接受0,1或2个位置参数

时间:2016-08-23 16:46:51

标签: python argparse

我使用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检查我?

1 个答案:

答案 0 :(得分:1)

argparse无法接受一系列nargs,只有12'+',{{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参数编码的,但是你明白了。)