python argparse - 在没有命令行的情况下将列表传递给argparse

时间:2015-08-22 09:22:11

标签: python argparse

我正在尝试使用我在另一个python脚本中使用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

在我看来,我定义的函数应该采用参数和标志列表,并返回命名空间。我错了吗?

2 个答案:

答案 0 :(得分: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):

答案 1 :(得分:-1)

我得到程序输入的另一种方式是来自带有键值对的json文件,并使用json加载库将文件的内容加载为json对象。