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 fun3 -x -y

import argparse
import sys


def fun1():
    print('Foo')

def fun2():
    print('Bar')

def fun3(x,y):
    print(x + y)

def fun4(x,y):
    print(x + y)


parser = argparse.ArgumentParser(description='Some stuff')
subparsers = parser.add_subparsers()

parser_fun1 = subparsers.add_parser('fun1', help='print Foo')
parser_fun1.set_defaults(func=fun1)


parser_fun2 = subparsers.add_parser('fun2', help='print Bar')
parser_fun2.set_defaults(func=fun2)


parser_fun3 = subparsers.add_parser('fun3', help='print x + y')
parser_fun3.set_defaults(func=fun3)
parser_fun3.add_argument('-x', type=int, required=True, help='def x')
parser_fun3.add_argument('-y', type=int, required=True, help='def y')


parser_fun4 = subparsers.add_parser('fun4', help='print x + y')
parser_fun4.set_defaults(func=fun4)
parser_fun4.add_argument('-x', type=int, required=True, help='def x')
parser_fun4.add_argument('-y', type=int, required=True, help='def y')

args = parser.parse_args()


if len(sys.argv) <= 1:
    sys.argv.append('--help')

options = parser.parse_args()

options.func()
hpaulj

https://docs.python.org/3/library/argparse.html#sub-commands

注意函数带有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'

您定义fun3(x,y),但致电args.func()xy丢失。

我可以传递args给您的函数,或者一般性的kwargs

def fun1(**kwargs):
    print('Foo')

def fun3(x=0,y=0,**kwargs):
    print(x + y)

然后打电话给 args.func(**vars(args))

2110:~/mypy$ python3 stack57517701.py fun3 -x 1 -y 2
Namespace(cmd='fun3', func=<function fun3 at 0x7f4bb264d0d0>, x=1, y=2)
3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章