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

如何用Python启动外部应用 实现Python退出后应用不关闭

现有代码是否满足需求

你当前使用os.popen()的实现无法稳定满足需求。
在Windows环境中,os.popen()启动的子进程会通过管道和Python父进程绑定,二者生命周期默认关联:当Python程序退出时,系统会回收对应管道资源,大概率连带关闭启动的Spotify进程。即便偶尔出现Spotify未随Python退出关闭的情况,也属于平台实现的偶发表现,没有可靠性。

修正实现方案

要实现Python程序退出后,启动的外部应用仍独立运行,需要在启动时彻底切断父子进程的生命周期绑定。以下方案针对你当前使用的Windows环境适配,推荐使用标准库subprocess完成配置,参考代码如下:

import subprocess

spotify_exe_path = r"C:\Users\49174\AppData\Roaming\Spotify\Spotify.exe"
subprocess.Popen(
    spotify_exe_path,
    shell=True,
    # 配置进程创建标志,让子进程完全脱离父进程
    creationflags=subprocess.CREATE_NEW_PROCESS_GROUP | subprocess.DETACHED_PROCESS,
    # 重定向标准流,避免父进程退出时流回收影响子进程
    stdin=subprocess.DEVNULL,
    stdout=subprocess.DEVNULL,
    stderr=subprocess.DEVNULL
)

关键配置说明:

  • CREATE_NEW_PROCESS_GROUP:为启动的Spotify创建独立的进程组,不归属Python进程的进程组
  • DETACHED_PROCESS:切断子进程和父进程的控制台关联,子进程不会接收父进程的退出信号
  • 三个标准流重定向到DEVNULL:避免Python退出时未关闭的管道句柄触发子进程异常退出
  • 路径字符串前加r标记为原始字符串,不需要手动写双反斜杠转义,路径写法更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:54:32