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

如何解决Python使用gTTS时出现的「[Errno 13] Permission denied」报错

问题根因

该报错的核心原因是output.mp3文件的句柄未被正常释放,由两个问题共同触发:

  1. 代码中冗余的open("output.mp3","w")操作打开文件后没有执行关闭,残留了占用句柄
  2. playsound库存在Windows平台的已知缺陷:音频播放结束后不会主动释放对应文件的句柄,导致后续运行时要覆盖写入该文件时,被系统判定为文件被占用,抛出权限错误。
排查与解决方法
  • 第一步先删除代码中多余的open("output.mp3","w")语句,gTTS的save()方法本身会自动创建并写入文件,不需要提前手动打开,该冗余操作本身就会造成文件占用。
  • 回退playsound到无句柄泄漏的版本:当前最新版playsound的Windows句柄泄漏问题尚未修复,回退到1.2.2版本即可解决,执行安装命令:
    pip install playsound==1.2.2
  • 更换音频播放库:也可以换用pygame等其他不存在文件占用问题的音频库实现播放,规避原生playsound的缺陷。
  • 生成唯一临时文件名:如果不想修改依赖库,可以每次运行时生成带唯一标识的文件名,避免重复写入同一个被占用的文件,示例代码如下:
from gtts import gTTS
import os
from playsound import playsound
import time

language = "en"
output = gTTS(text="hello world", lang=language, slow=False)
# 用时间戳生成唯一文件名,避免重复占用
file_name = f"output_{int(time.time())}.mp3"
output.save(file_name)
playsound(file_name)
# 播放完成后可删除临时文件,避免占用存储空间
os.remove(file_name)
  • 临时解决方案:Windows系统下如果遇到报错,可以通过资源监视器找到占用output.mp3的进程,手动结束进程即可恢复写入,但该方法治标不治本,建议优先从代码层面修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:06:02