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

如何通过批处理启动Windows应用并让应用在脚本结束后持续运行?

问题描述

我有一个Windows应用,必须通过.bat文件启动——该批处理脚本在启动目标.exe前会先调用其他程序。目前遇到的问题是:批处理脚本执行完毕退出后,启动的应用也随之关闭。我尝试过几种Python调用方式,但都没解决:

  • 使用subprocess.Popen并添加DETACHED_PROCESS参数,但time.sleep结束后exe仍会关闭:
    subprocess.Popen(['cd','path\to\the\script', '&&', 'start.bat' ], shell=True, text=True | subprocess.DETACHED_PROCESS )
    time.sleep(10)
    
  • 尝试过subprocess.CREATE_NEW_PROCESS_GROUP参数,以及os.system调用:
    os.system('cd "path\to\the\script" && "start.bat"')
    

需求:找到能让bat启动后应用持续运行的方法,不能直接调用exe,也不想在Python里加无限循环。


解决方案1:修改.bat文件的启动逻辑

问题核心是:默认情况下,bat中直接启动的exe会作为bat的子进程,bat退出时会终止所有子进程。用start命令启动exe可以让它脱离bat的进程组,独立运行。

将bat中启动exe的行,从:

myapp.exe

修改为:

start "" "myapp.exe"
  • 空双引号是start命令的必填占位符(作为窗口标题),避免路径含空格时解析错误。
  • 如果不需要新开控制台窗口,添加/B参数:
    start /B "" "myapp.exe"
    

修改后,无论用哪种Python方式调用bat,bat执行完毕退出后,exe都会继续运行。

解决方案2:调整Python的subprocess调用参数

如果无法修改bat文件,可通过调整Python的调用参数,让bat和exe完全脱离Python进程的控制:

方式一:新开控制台窗口

import subprocess

subprocess.Popen(
    "start.bat",
    cwd="path\\to\\the\\script",  # 直接设置bat所在目录,替代cd命令
    shell=True,
    creationflags=subprocess.CREATE_NEW_CONSOLE | subprocess.DETACHED_PROCESS
)
  • CREATE_NEW_CONSOLE为bat创建独立控制台,DETACHED_PROCESS让进程脱离Python父进程,Python退出后bat和exe不受影响,bat执行完后exe也不会被关闭。

方式二:不新开控制台窗口

import subprocess

subprocess.Popen(
    "start.bat",
    cwd="path\\to\\the\\script",
    shell=True,
    creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NO_WINDOW,
    stdout=subprocess.DEVNULL,
    stderr=subprocess.DEVNULL,
    stdin=subprocess.DEVNULL
)
  • 重定向标准输入输出到空,避免残留句柄导致进程被挂起,同时不生成新窗口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:25:11