Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用函数时Python argparse不会接受参数_Python_Argparse - Fatal编程技术网

调用函数时Python argparse不会接受参数

调用函数时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

我的脚本由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 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进行练习,希望理解。