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

python argparse - passing list to argparse without command line

我正在尝试使用我在另一个 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)

这个return是一个:

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

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

您需要将这些参数传递给 parser.parse_args() 方法:

args = parser.parse_args(argv)

来自ArgumentParser.parse_args() documentation:

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

[...]

By default, the argument strings are taken from sys.argv [...]

注意那里的 args 论点。您可能希望将 argHandler() 函数的 argv 参数也默认设置为 None;这样你就不会 传递参数并最终得到相同的默认 None 值:

def argHandler(argv=None):

我获取程序输入的另一种方法是从具有键值对的 json 文件并使用 json 加载库将文件内容加载为 json 对象。