如何用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
相关产品推荐
相关产品推荐

