调用函数时Python argparse不会接受参数
我的脚本由4个函数组成。其中两个需要争论。我正在尝试使用argparse创建一个简单的CLI,可以从4个函数中选择要调用的任何函数 目前,在尝试运行不需要参数的函数时,一切正常!但是当尝试运行其他需要参数的函数时,我得到了一个错误调用函数时Python argparse不会接受参数,python,argparse,Python,Argparse,我的脚本由4个函数组成。其中两个需要争论。我正在尝试使用argparse创建一个简单的CLI,可以从4个函数中选择要调用的任何函数 目前,在尝试运行不需要参数的函数时,一切正常!但是当尝试运行其他需要参数的函数时,我得到了一个错误 usage: test.py fun3 [-h] -x X -y Y test.py fun3: error: the following arguments are required: -x, -y 正在尝试使用以下命令从终端运行: python test.py
usage: test.py fun3 [-h] -x X -y Y
test.py fun3: error: the following arguments are required: -x, -y
正在尝试使用以下命令从终端运行:
python test.py fun3 -x -y
import argparse
导入系统
def fun1():
打印('Foo')
def fun2():
打印('Bar')
def fun3(x,y):
打印(x+y)
def fun4(x,y):
打印(x+y)
parser=argparse.ArgumentParser(description='Some stuff')
subparsers=parser.add_subparsers()
parser\u fun1=子parsers.add\u parser('fun1',help='print Foo')
解析器\u fun1.set\u默认值(func=fun1)
parser\u fun2=子parsers.add\u parser('fun2',help='print Bar'))
解析器\u fun2.set\u默认值(func=fun2)
parser\u fun3=子parsers.add\u parser('fun3',help='print x+y')
解析器\u fun3.set\u默认值(func=fun3)
parser_fun3.add_参数('-x',type=int,required=True,help='def x')
parser_fun3.add_参数('-y',type=int,required=True,help='def y')
parser\u fun4=子parser。添加\u parser('fun4',help='print x+y')
解析器\u fun4.set\u默认值(func=fun4)
parser_fun4.add_参数('-x',type=int,required=True,help='def x')
parser_fun4.add_参数('-y',type=int,required=True,help='def y')
args=parser.parse_args()
如果len(sys.argv)的-x
和-y
选项需要参数,则需要像
python teset.py fun3 -x 10 -y 15
-x
和-y
选项需要参数,您需要像
python teset.py fun3 -x 10 -y 15
注意:这些函数采用args
参数
>>> # parse the args and call whatever function was selected
>>> args = parser.parse_args('foo 1 -x 2'.split())
>>> args.func(args)
2.0
在您的代码中,我添加了注释中的print(args)
和dest='cmd'
如果没有必需的参数,我将从解析器获得一条错误消息:
2106:~/mypy$ python3 stack57517701.py fun3
usage: stack57517701.py fun3 [-h] -x X -y Y
stack57517701.py fun3: error: the following arguments are required: -x, -y
有了正确的输入,我现在从调用fun3
得到错误消息:
2106:~/mypy$ python3 stack57517701.py fun3 -x 1 -y 2
Namespace(cmd='fun3', func=<function fun3 at 0x7facba5d60d0>, x=1, y=2)
Traceback (most recent call last):
File "stack57517701.py", line 43, in <module>
args.func()
TypeError: fun3() missing 2 required positional arguments: 'x' and 'y'
并使用args.func(**vars(args))
2110:~/mypy$python3 stack57517701.py fun3-x1-y2
命名空间(cmd='fun3',func=,x=1,y=2)
3.
注意:这些函数采用args
参数
>>> # parse the args and call whatever function was selected
>>> args = parser.parse_args('foo 1 -x 2'.split())
>>> args.func(args)
2.0
在您的代码中,我添加了注释中的print(args)
和dest='cmd'
如果没有必需的参数,我将从解析器获得一条错误消息:
2106:~/mypy$ python3 stack57517701.py fun3
usage: stack57517701.py fun3 [-h] -x X -y Y
stack57517701.py fun3: error: the following arguments are required: -x, -y
有了正确的输入,我现在从调用fun3
得到错误消息:
2106:~/mypy$ python3 stack57517701.py fun3 -x 1 -y 2
Namespace(cmd='fun3', func=<function fun3 at 0x7facba5d60d0>, x=1, y=2)
Traceback (most recent call last):
File "stack57517701.py", line 43, in <module>
args.func()
TypeError: fun3() missing 2 required positional arguments: 'x' and 'y'
并使用args.func(**vars(args))
2110:~/mypy$python3 stack57517701.py fun3-x1-y2
命名空间(cmd='fun3',func=,x=1,y=2)
3.
您没有提供参数。使用要求标志后面有数字。谢谢!在我提供了参数之后,我在options.func()AttributeError:“Namespace”对象没有属性“func”`的第143行得到了错误`File“test.py',在调试过程中,最好包含一个print(options)
语句,以便清楚地了解解析器所做的工作。使用parser.add_subparsers(dest='cmd')
也是一个有用的想法,尽管您似乎正确地设置了func
属性。print(options)
输出所有函数的列表和帮助部分的文本如果出现问题,你能给我展示一下argparse脚本的好例子吗?你没有提供参数。使用要求标志后面有数字。谢谢!在我提供了参数之后,我在options.func()AttributeError:“Namespace”对象没有属性“func”`的第143行得到了错误`File“test.py',在调试过程中,最好包含一个print(options)
语句,以便清楚地了解解析器所做的工作。使用parser.add_subparsers(dest='cmd')
也是一个有用的想法,尽管您似乎正确地设置了func
属性。print(options)
从帮助部分输出所有函数和文本的列表如果问题太多,您能展示一下argparse脚本的好例子吗?对不起,但是它在options.func()AttributeError中的第143行给出了一个错误`File“test.py`:`Namespace'对象没有属性`func``当我在没有任何输出的情况下调用这行函数时,`code>options.func()
要做什么?据我所知,它提供了从命令行直接调用函数的可能性。对不起,但是它在options.func()AttributeError中的第143行给出了一个错误'File“test.py','Namespace'对象没有属性'func',当我在没有任何输出的情况下调用这一行函数时,您希望options.func()
做什么?据我所知,它提供了从命令行直接调用函数的可能性。请您展示一下结束脚本的样子好吗。这是我第一次使用CLI进行练习,希望理解。请您展示一下结束脚本的样子。这是我第一次使用CLI进行练习,希望理解。