我正在尝试使用我在另一个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
在我看来,我定义的函数应该采用参数和标志列表,并返回命名空间。我错了吗?
答案 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对象。