【问题标题】:python argparse extra argspython argparse 额外参数
【发布时间】:2015-06-02 19:34:07
【问题描述】:

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

我想在 python 中使用argparse 得到同样的东西,并得到某种带有所有参数的dict..

我知道我可以使用:

aparser.parse_known_args()

但是我需要解析我额外的参数(删除-D 并由= 分割)。想知道是否有开箱即用的东西?

谢谢!

【问题讨论】:

    标签: python arguments argparse


    【解决方案1】:

    你可以使用

    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)
    

    【讨论】:

    • 这意味着我需要按= 分割,这样就可以了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2011-10-10
    • 2018-07-09
    • 2014-07-23
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多