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

Python调用subprocess启动外部程序后无法退出且连带关闭子进程怎么办

问题原因

subprocess.call() 为阻塞调用,会等待目标进程完全退出后才会返回结果,所以你的Python程序会一直停在调用位置无法继续执行。而默认场景下你调用启动的程序属于Python进程的子进程,父进程退出时会主动终止关联的子进程,所以会出现关Python连带关Minecraft启动器的问题。

解决方案

改用 subprocess.Popen() 异步启动进程,同时配置参数让目标进程完全脱离Python主进程控制,启动后直接退出Python即可。
Windows环境下的正确实现代码如下:

import subprocess

if app == "M":
    # 路径加r前缀转为原始字符串,避免反斜杠转义异常
    launcher_path = r'C:\Program Files (x86)\Minecraft Launcher\MinecraftLauncher.exe'
    # 异步启动独立进程
    subprocess.Popen(
        launcher_path,
        creationflags=subprocess.DETACHED_PROCESS,
        close_fds=True
    )
    # 启动完成直接退出程序
    exit()

参数说明

  • subprocess.Popen 是非阻塞进程调用方法,调用后立刻返回,无需等待目标进程运行结束
  • creationflags=subprocess.DETACHED_PROCESS 是Windows平台专属参数,可让启动的进程脱离父进程控制台,父进程退出不会对子进程产生任何影响
  • close_fds=True 会切断两个进程之间的文件描述符继承,进一步解除进程关联

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:48:02