2015-08-22 3 views
2

Я пытаюсь использовать обработчик аргументов, который я написал, используя argparse из другого скрипта python. Я хотел бы назвать это, передав ему список аргументов. Вот простой пример:python argparse - пропустить список для argparse без командной строки

def argHandler(argv): 

    import argparse 

    parser = argparse.ArgumentParser(description='Test argument parser') 

    parser.add_argument('foo', action='store',type=str) 
    parser.add_argument('bar', action='store',type=str) 
    parser.add_argument('-nee','--knightssaynee',action='store',type=str) 

    args = parser.parse_args() 

    return args.foo, args.bar, args.nee 

if __name__=='__main__': 

    argList = ['arg1','arg2','-nee','arg3'] 

    print argHandler(argList) 

Это возвращает:

usage: scratch.py [-h] [-nee KNIGHTSSAYNEE] foo bar 
scratch.py: error: too few arguments 

Мне кажется, что функция, которую я определяю должен принимать список аргументов и флагов, и возвращает пространство имен. Я ошибаюсь?

ответ

3

Вы должны передать эти аргументы parser.parse_args() метода:

args = parser.parse_args(argv) 

От ArgumentParser.parse_args() documentation:

ArgumentParser.parse_args(args=None, namespace=None)

[...]

По умолчанию строки аргументов взяты из sys.argv [...]

Обратите внимание на аргумент args. Вы можете сделать аргумент argv своей функции argHandler() по умолчанию: None; Таким образом, вы не имеют передать в качестве аргумента и в конечном итоге с тем же по умолчанию None значения:

def argHandler(argv=None): 
+0

Это сработало! Спасибо, мне просто нужно было изменить: 'args = parser.parse_args()' to 'args = parser.parse_args (argv)' в моем коде – YoungPadawan

-1

другой способ я получить вход в программу от JSon файла с парой ключей и значений с помощью JSon нагрузки библиотека для загрузки содержимого файла в качестве объекта json.

+1

И это должно делать то, что именно с вопросом? – BlackJack