繁体   English   中英

python argparse额外的args

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM