只接受0、1或2个位置参数

2024-04-26 06:45:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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)

对于第一、第二和第三个parse_args()结果是预期的。最后一种方法是if len(parse_args.strs) > 2: raise。有没有更好的方法可以让argparse帮我检查一下?你知道吗


Tags: 方法字符串命令行importparser列表参数parse
1条回答
网友
1楼 · 发布于 2024-04-26 06:45:34

argparse中没有接受nargs范围的方法,只有12'+''*'这样的值。你知道吗

您可以编写一个定制的Action类来检查nargs='*'传递给它的值的数量。但我认为在解析之后执行这个测试同样容易。你知道吗

我可以找到一个bug/问题,如果你真的想加入rangenargs选项的话。你知道吗

如果没有其他位置,可以定义3个位置,其中2个使用?。您甚至可以将它们组合到一个具有通用名称和“append”操作的列表中。我来探索一下。你知道吗

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])

得到了default的答案。我可以用英语纠正

p.add_argument('str', nargs='?', action='append', default=argparse.SUPPRESS)

In [586]: p.parse_args('1 2'.split())
Out[586]: Namespace(str=['1', '2'])
In [588]: p.parse_args('1 2 3 4'.split())
usage: ipython3 [-h] str [str] [str]
ipython3: error: unrecognized arguments: 4

(哦,这是为1-3参数编码的,但是你明白了)。你知道吗

相关问题 更多 >