mixer.music.play()在Mu编辑器运行正常,终端执行无效果无报错
问题原因
你遇到的是sudo运行时权限和进程生命周期的共同问题,具体原因如下:
sudo默认以root用户身份执行程序,root用户默认没有访问当前登录普通用户音频设备的权限,而Mu编辑器是用你当前登录的普通用户权限启动的,所以可以正常调用音频输出。mixer.music.play()是异步执行方法,调用后会直接返回不会阻塞主进程,你当前代码里play之后没有加等待逻辑,脚本执行完会直接退出,音频播放进程会被提前销毁,root环境下进程销毁速度更快,更容易触发这个问题。
解决方法
- 如果你不需要用到必须root权限的硬件操作(比如GPIO控制),直接去掉sudo运行即可:
python app.py - 如果必须使用sudo运行,可选择以下任意一种方案:
- 给root用户添加音频设备访问权限,执行命令后重启生效:
sudo usermod -a -G audio root - 运行时保留当前用户的音频环境变量,适配PulseAudio音频服务(树莓派桌面版默认使用):
sudo --preserve-env=PULSE_RUNTIME_PATH python app.py - 修改代码,在播放后添加阻塞等待逻辑,避免进程提前退出:
from gtts import gTTS from pygame import mixer import time tts = gTTS('test') tts.save('hello.mp3') time.sleep(3) mixer.init() mixer.music.load('/home/pi/Desktop/game/hello.mp3') mixer.music.play() # 新增等待播放完成的逻辑 while mixer.music.get_busy(): time.sleep(0.1)
- 给root用户添加音频设备访问权限,执行命令后重启生效:
内容的提问来源于stack exchange,提问作者Elias
相关产品推荐
相关产品推荐

