如何删除正在播放的.wav文件?Python操作时报PermissionError怎么解决?
问题原因
报错是因为pygame.mixer.music.play()是异步执行方法,调用后会立刻返回执行后续代码,不会等待音频播放完成。此时my.wav文件还被pygame进程占用,直接执行os.remove就会触发进程占用的权限错误。
解决方案
需要先等待音频播放完成,再释放pygame mixer对文件的占用,最后执行删除操作即可。
修正后的完整代码如下:
from pygame import mixer import os import pyttsx3 import time # 新增导入time模块用于等待 engine=pyttsx3.init() engine.setProperty('rate',165) engine.save_to_file('my name is unkown','my.wav') engine.runAndWait() mixer.init() mixer.music.load('my.wav') mixer.music.play() # 等待音频播放完成 while mixer.music.get_busy(): time.sleep(0.1) # 每次检测间隔0.1秒,避免空循环占用过高CPU # 关闭mixer,彻底释放文件占用 mixer.quit() os.remove('my.wav')
注意事项
- 如果后续还要继续使用mixer,可以不用调用
mixer.quit(),仅等待播放完成也能解决大部分占用问题,添加quit是为了兼容Windows系统下的文件句柄占用逻辑,稳定性更高。 - 调整
time.sleep的间隔大小不会影响播放体验,仅控制状态检测频率。
内容的提问来源于stack exchange,提问作者Kushagra Pandey
相关产品推荐
相关产品推荐

