2015-03-29 4 views
0

Мне бы хотелось получить дополнительные аргументы, используя argparse, но не зная, что это такое. , например, в maven можно добавлять параметры в виде: -Dmaven.test.skip=true или -Dcmd=compiler:compilepython argparse extra args

я хотел бы получить то же самое в Python с использованием argparse и получить какие-то dict со всем аргом ..

я знаю, я могу использовать:

aparser.parse_known_args() 

но потом мне нужно разобрать мне дополнительный арг (удалить -D и разбивку по =). Интересно, есть ли что-то из коробки?

Спасибо!

ответ

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) 
+0

Это будет означать, что мне нужно разделить на '='. Благодаря ! – Udy

Смежные вопросы