【问题标题】:Python Starting Java application with subprocess:Invalid maximum heap sizePython 使用子进程启动 Java 应用程序:最大堆大小无效
【发布时间】:2025-12-11 21:05:01
【问题描述】:

我正在尝试使用 subprocess 模块使用 Python 启动 Java 应用程序。我对 Python 并不陌生,但我对 subprocess 模块很陌生。当我尝试运行此代码时:

import subprocess as sp
proc = sp.Popen(["java", "-Xmx1536M -Xms1536M", "-jar /home/bekk/MServer/ForgeBukkit/MCPC.jar"],stdin=sp.PIPE,stdout=sp.PIPE,)

命令:

java -Xmx1536M -Xms1536M -jar /home/bekk/MServer/ForgeBukkit/MCPC.jar

在终端输入时可以正确运行,所以我知道它可以工作。 从 Python 运行它似乎是一个问题。对我的问题可能有什么想法?

【问题讨论】:

  • 当您尝试运行该代码时,...,什么?你开始了一个句子,但没有说完。

标签: python java subprocess heap-memory


【解决方案1】:

您将 "-Xmx1536M -Xms1536M" 作为单个参数传递。

这不等同于这个 shell 命令:

java -Xmx1536M -Xms1536M -jar /home/bekk/MServer/ForgeBukkit/MCPC.jar

……但是对于这个:

java '-Xmx1536M -Xms1536M' -jar /home/bekk/MServer/ForgeBukkit/MCPC.jar

因此,Java 将获得 '-Xmx1536M -Xms1536M' 作为其 argv[1],而不是在 argv[1] 中获得一个标志,在 argv[2] 中获得下一个标志。当您尝试将 mx 设置为 '1536M -Xms1536M' 时,它会解释一个巨大的标志 arg,这不是有效的最大堆大小。

要修复它,请将每个参数放在列表中自己的字符串中:

["java", "-Xmx1536M", "-Xms1536M", "-jar", "/home/bekk/MServer/ForgeBukkit/MCPC.jar"]

【讨论】:

    最近更新 更多