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

使用subprocess执行Jar文件后Python脚本挂起无法运行后续代码问题

脚本挂起修复方案

根因定位

  • 错误传递shell后台符号:subprocess.Popen 调用时传入的&是shell专属的后台运行语法,在默认shell=False的模式下,该符号会被作为非法参数传递给java进程,导致进程启动异常卡住,后续代码无法执行。
  • 标准错误缓冲区未处理:你仅重定向了标准输出到DEVNULL,未处理标准错误输出。如果jar包运行过程中向标准错误输出大量内容,缓冲区占满后系统会自动阻塞该进程,导致脚本挂起。

修复代码

直接替换原有p2定义的代码行即可:

# Popen本身为异步启动,无需额外加&,同时重定向标准错误避免缓冲区阻塞
p2 = subprocess.Popen(["java", "-jar", "serverstarter-2.0.1.jar"],
                      stdout=subprocess.DEVNULL,
                      stderr=subprocess.DEVNULL)

修改后原有等待180秒再终止进程、清理文件的逻辑可以正常运行,不会出现挂起问题。

可选优化(非必须)

现有代码中遍历forge jar文件的逻辑存在未找到文件时变量未定义的风险,可以调整为:

forge_jar_file = glob(dest + "forge-*.jar")
if forge_jar_file:
    os.rename(forge_jar_file[0], os.path.join(dest, "atm6.jar"))
else:
    post_to_slack(f"Error occured in {os.path.basename(__file__)}! 未找到forge jar文件")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:45:10