python argparse额外的args

时间:2015-03-29 21:35:38

标签: python arguments argparse

我想使用argparse获得额外的参数但不知道它们是什么。 例如,在maven中,我们可以在表单中添加参数: -Dmaven.test.skip=true-Dcmd=compiler:compile

我想在使用argparse的python中获得相同的东西,并获得某种dict所有的args ..

我知道我可以使用:

aparser.parse_known_args()

然后我需要解析额外的args(删除-D并按=拆分)。想知道是否有开箱即用的东西?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用

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)