You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Python脚本向jar包传递参数时报错该如何解决?

问题根因

你当前的报错和异常逻辑由以下几个错误导致:

  1. 误用subprocess.check_output获取Python脚本的入参:Python脚本的入参直接从sys.argv列表读取即可,完全不需要调用subprocess相关方法
  2. 传入了非法参数类型给subprocess:sys.argv本身就是列表,你写的[sys.argv]是嵌套列表,subprocess要求传入的参数序列里的元素必须是字符串,嵌套列表会直接触发类型错误
  3. 命令参数存在冗余空格:'test_python.jar '后面多了多余的空格,会导致Java命令无法正确识别jar包名称
  4. 额外注意:如果你打包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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:00:03