[英]python argparse extra args
我想使用argparse
获得额外的args,但不知道它们是什么。 例如,在maven
我们可以添加以下形式的参数: -Dmaven.test.skip=true
或-Dcmd=compiler:compile
我想使用argparse
在python中获得相同的结果,并使用所有args获得某种dict
。
我知道我可以使用:
aparser.parse_known_args()
但是然后我需要解析我额外的参数(删除-D
并用=
分隔)。 想知道是否有开箱即用的东西吗?
谢谢!
您可以使用
parser.add_argument('-D', action='append', default=[])
这将引起争论
-Dfoo -Dbar=baz
进入
>>> args.D
['foo', 'bar=baz']
而且,没有-D
参数将意味着args.D
将返回一个空列表。
如果您希望将它们用作字典,则可以执行自定义操作:
def ensure_value(namespace, dest, default):
stored = getattr(namespace, dest, None)
if stored is None:
return value
return stored
class store_dict(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
vals = dict(ensure_value(namespace, self.dest, {}))
k, _, v = values.partition('=')
vals[k] = v
setattr(namespace, self.dest, vals)
parser.add_argument('-D', default={}, action=store_dict)
给定-Dfoo -Dbar=baz
将导致
>>> args.D
{'bar': 'baz', 'foo': ''}
这比使用稍微详细action='append'
与
>>> as_dict = dict(i.partition('=')[::2] for i in args.D)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.