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

Python脚本执行Java命令报错,同命令在CLI运行正常求排查

解决Python subprocess启动Minecraft服务器Jar时的Java Runtime错误

你的问题出在subprocess的参数列表构造错误上:"-jar server.jar"被当作了一个单独的命令行参数,而Java需要-jar作为独立选项,后面跟server.jar作为它的参数。这种错误的参数格式导致Java无法正确解析启动命令,进而抛出找不到合适Runtime的错误。

修复方法

把-jar和server.jar拆分成两个独立的列表元素,同时推荐把Java可执行文件路径直接放在参数列表的首位(比用executable参数更直观且不易出错):

def first_launch(self):
    if self.is_initialize:
        subprocess.run(
            ["/usr/bin/java", f"-Xmx{self.max_memory}M", f"-Xms{self.min_memory}M", "-jar", "server.jar", "nogui"],
            cwd=self.directory
        )
    else:
        raise Exception("Server is not initialized")

如果一定要保留executable参数,只需要拆分-jar相关的参数即可:

def first_launch(self):
    if self.is_initialize:
        subprocess.run(
            [f"-Xmx{self.max_memory}M", f"-Xms{self.min_memory}M", "-jar", "server.jar", "nogui"],
            executable="/usr/bin/java",
            cwd=self.directory
        )
    else:
        raise Exception("Server is not initialized")

为什么这样能解决问题

终端中执行命令时,每个选项和参数都是分开传递的,而subprocess的列表参数要求每个命令行元素都单独成为列表的一项。之前的写法把-jar server.jar合并成一个字符串,Java会把这个字符串整体当作未知选项,无法识别启动Jar包的指令,最终触发错误提示。

内容的提问来源于stack exchange,提问作者Chris Schmitz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:20:22