运行Python脚本向jar包传递参数时报错该如何解决?
问题根因
你当前的报错和异常逻辑由以下几个错误导致:
- 误用
subprocess.check_output获取Python脚本的入参:Python脚本的入参直接从sys.argv列表读取即可,完全不需要调用subprocess相关方法 - 传入了非法参数类型给subprocess:
sys.argv本身就是列表,你写的[sys.argv]是嵌套列表,subprocess要求传入的参数序列里的元素必须是字符串,嵌套列表会直接触发类型错误 - 命令参数存在冗余空格:
'test_python.jar '后面多了多余的空格,会导致Java命令无法正确识别jar包名称 - 额外注意:如果你打包jar的时候没有在MANIFEST.MF中配置主类为
test_python.Test_python,直接使用java -jar会抛出找不到主类的错误。
修复方案
第一步:修正Python脚本代码
import subprocess import sys # 校验入参数量 if len(sys.argv) != 3: print("用法错误:请传入两个数字参数,示例:python test.py 2 3") sys.exit(1) # 直接从sys.argv读取入参,sys.argv[0]是当前脚本的文件名 first_arg = sys.argv[1] second_arg = sys.argv[2] try: # 调用jar包,text=True表示返回结果为字符串而非字节流 result = subprocess.check_output( ['java', '-jar', 'test_python.jar', first_arg, second_arg], text=True ) print("加法运算结果:", result.strip()) except subprocess.CalledProcessError as e: print("调用Java程序出错,错误信息:", e.output)
第二步:可选修复(如果jar包未配置主类)
如果打包时没有配置主类,把调用命令替换为以下写法即可:
result = subprocess.check_output( ['java', '-cp', 'test_python.jar', 'test_python.Test_python', first_arg, second_arg], text=True )
内容的提问来源于stack exchange,提问作者SerCio
相关产品推荐
相关产品推荐

