您可以将nargs=4 与'append' 操作一起使用:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--group', nargs=4, action='append')
print parser.parse_args()
它会被称为:
$ python ~/sandbox/test.py --group 1 2 3 4 --group 1 2 3 4
Namespace(group=[['1', '2', '3', '4'], ['1', '2', '3', '4']])
如果您愿意,可以从这里解析键值对。
另一种选择是使用自定义操作进行解析——这是一个简单的操作,它接受 --group key:value key2:value2 ... --group ... 形式的参数
import argparse
class DictAction(argparse.Action):
def __init__(self, *args, **kwargs):
super(DictAction, self).__init__(*args, **kwargs)
self.nargs = '*'
def __call__(self, parser, namespace, values, option_string=None):
# The default value is often set to `None` rather than an empty list.
current_arg_vals = getattr(namespace, self.dest, []) or []
setattr(namespace, self.dest, current_arg_vals)
arg_vals = getattr(namespace, self.dest)
arg_vals.append(dict(v.split(':') for v in values))
parser = argparse.ArgumentParser()
parser.add_argument('--group', action=DictAction)
print parser.parse_args()
这没有检查(因此如果key:value 的格式不正确,用户可能会觉得TypeErrors 很有趣),如果您想将其限制为指定的键,您还需要构建它。 ..但这些细节应该很容易添加。您还可以要求他们在 DictAction.__init__ 中使用 self.nargs = 4 提供 4 个值。