簡體   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