[英]How to pass an argument calling a function using ArgParse?
我正在尝试使用参数调用 function_3,但收到无法识别的错误 arguments。我是这样调用的: python script.py --pass test
import argparse
import sys
def function_1():
print('Function 1')
def function_2():
print('Function 2')
def function_3(arg):
print(f'Function 3 {arg}')
if __name__ == "__main__":
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parser_f1 = subparsers.add_parser('fc1', help='Function 1')
parser_f1.set_defaults(func=function_1)
parser_f2 = subparsers.add_parser('fc2', help='Function 2')
parser_f2.set_defaults(func=function_2)
parser_f3 = subparsers.add_parser('fc3', help='Function 3')
parser_f3.add_argument("pass", help="function 3 argument")
parser_f3.set_defaults(func=function_3)
if len(sys.argv) <= 1:
sys.argv.append('--help')
options = parser.parse_args()
options.func()
usage: argtest.py [-h] {fc1,fc2,fc3} ...
argtest.py: error: unrecognized arguments: --arg
首先,您的pass
选项仅适用于fc3
子解析器,因此您需要的不是python script.py --pass test
,而是:
python script.py fc3 --pass test
但是您定义了位置参数,而不是命令行选项。 您需要像这样调用您的脚本:
python script.py fc3 test
或者您需要修复代码:
parser_f3.add_argument('--pass', help='function 3 argument')
这将允许您运行python script.py fc3 --pass test
。
代码还有其他问题; 你的function3
function 需要一个参数,但你调用options.func()
没有 arguments,这将导致TypeError
异常。
我不建议这样做,我个人建议只使用点击,但我想这是一种方法......
import sys
from argparse import ArgumentParser
def parse_args():
parser = ArgumentParser()
parser.add_argument(
"-f", "--function", type=str, help="name of the function to call", default="echo"
)
parser.add_argument("func_args", nargs="*")
return parser.parse_args(args=None if sys.argv[1:] else ["--help"])
def echo(*args):
print(' '.join(*args))
if __name__ == "__main__":
args = parse_args()
eval(f"{args.function}({args.func_args})")
这种方法对我来说是脆弱和错误的,但我相信这符合您要求的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.