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

Python脚本调用jar文件时程序被立即终止的原因及解决方法

问题排查与修复方案

原有代码的核心问题

  • 命令拼接逻辑完全不符合Windows CMD的运行规则:开启shell=True时,subprocess会把传入的列表参数拼接为完整的CMD命令行执行。你原本传入的['D:', 'cd', PurePath(fileDirectory), 'START', '""', fileToExecute]中,手动编写的切盘符、cd目录逻辑和强制设置的cwd=os.getcwd()(Python脚本自身的运行目录)冲突,相当于让程序在Python脚本的目录下找目标jar,自然无法正常启动。
  • 引号转义错误:你原本加在START后面的'""'(空窗口标题参数),在列表传参给shell时会被错误解析,把后续的文件路径识别为以//开头的网络路径,最终触发你遇到的The network path was not found //类报错。
  • 之前的托盘闪退问题:最初直接调用jar时,Java进程是作为当前CMD窗口/Python进程的子进程存在的,只要父进程(CMD/Python)退出,子进程就会被连带终止,因此会出现托盘图标弹出后立刻消失的情况。START命令的作用就是让目标程序脱离父进程的进程树,成为独立运行的进程,从根源上解决连带终止的问题。
  • 那段维持脚本运行的代码无效的原因:这段代码本身没有解决jar进程的父进程关联问题,只是让Python脚本自己不退出,对已经是子进程的jar程序没有任何保护作用。

可稳定运行的实现

你最后调整的代码能正常工作的核心原因是:

  1. 直接把cwd参数设置为目标jar所在的目录PurePath(fileDirectory),由Python自动处理跨盘符的工作目录切换,替代了手动切盘符、cd的冗余逻辑,也避免了jar因为找不到同目录下的配置、资源文件直接闪退(Shimeji这类jar程序高度依赖当前工作目录读取配置,工作目录不对就算启动也会立刻退出)。
  2. 移除了转义错误的引号参数,避免了路径被识别为网络共享路径的问题。

如果担心程序路径包含空格时START命令会误把路径第一个参数识别为窗口标题,可以正确传递空标题参数,避免解析错误,写法为:
subprocess.run(['START', '', fileToExecute], cwd=PurePath(fileDirectory), shell=True)

额外注意事项

  • Windows环境下用subprocess调用CMD命令时,尽量不要手动拼接切盘符、cd目录的逻辑,直接通过cwd参数指定目标工作目录即可,Python会自动处理跨盘符的路径切换,可靠性远高于手动写CMD命令。
  • 不需要依赖延长Python脚本运行时间的方式保持jar程序运行,只要通过START让jar成为独立进程,就算Python脚本提前退出,jar程序也会正常持续运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 01:15:03