Python如何用subprocess启动带窗口后台子进程且不阻塞主脚本运行
解决方法
你需要将阻塞调用的subprocess.call替换为异步非阻塞的subprocess.Popen,同时重定向子进程的输出到空设备来屏蔽控制台日志,修改后的代码如下:
适配Python 3.3及以上版本(推荐)
import subprocess # 前面的原有代码 subprocess.Popen( ['ffplay', 'video.mp4'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL ) # 后续代码会立即执行,不需要等待ffplay窗口关闭
适配Python 3.3以下版本
import subprocess import os # 前面的原有代码 with open(os.devnull, 'w') as null_f: subprocess.Popen( ['ffplay', 'video.mp4'], stdout=null_f, stderr=null_f ) # 后续代码会立即执行,不需要等待ffplay窗口关闭
可选补充说明
- 如果后续需要主动关闭ffplay播放窗口,可以保留
Popen返回的进程实例,调用终止方法即可:# 存储进程实例 ffplay_process = subprocess.Popen( ['ffplay', 'video.mp4'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL ) # 需要关闭播放时执行 ffplay_process.terminate() - 该修改不会影响ffplay播放窗口的正常显示,所有运行日志会被直接丢弃不会输出到控制台。
内容的提问来源于stack exchange,提问作者mintermine
相关产品推荐
相关产品推荐

