python argparse额外参数

2024-09-24 22:22:23 发布

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

我想使用argparse获得额外的参数,但不知道它们是什么。 例如,在maven中,我们可以以以下形式添加参数: -Dmaven.test.skip=true或{}

我希望在python中使用argparse得到相同的结果,并得到一些带有所有参数的{}。。在

我知道我可以使用:

aparser.parse_known_args()

但是我需要解析额外的参数(删除-D并按=拆分)。想知道有没有现成的东西?在

谢谢!在


Tags: testtrue参数parseargparseargs形式known
1条回答
网友
1楼 · 发布于 2024-09-24 22:22:23

你可以用

parser.add_argument('-D', action='append', default=[])

这会引起争论

^{pr2}$

进入

>>> 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': ''}

这比使用

>>> as_dict = dict(i.partition('=')[::2] for i in args.D)

相关问题 更多 >