Pygame不会播放音频,但只有在作为守护进程运行时



一点背景:我有一个运行Raspbian(Debian(9.11的Raspberry Pi 3b。这个最初的Pi运行一个Python3脚本,该脚本捕获手持扫描仪输入的文本并将其发送到MySQL数据库,然后播放一个wav文件,让扫描的员工知道它是成功的。我守护了这个过程,这样更容易重新启动(有时扫描仪会与USB加密狗失去同步(。守护程序文件中的主线是这个

ExecStart=/usr/bin/python3 /home/pi/Desktop/scanner.py

我不得不为一个被要求创建的新实例稍微更改流程,所以我将Raspbian 10.4(最新版本(加载到另一个Pi 3b上,只需稍微调整一下就可以将所有内容移到本地Maria DB(基本上是MySQL(中。精灵运行得很好。。。除了没有音频播放(但是DB插入仍然发生(。真正奇怪的是,当我把它加载到Thonny时,它能很好地播放文件。系统日志中没有任何内容表明Python或Pygame正在生成任何错误。

此处的相关代码(缩写(为

import pygame.mixer
# sets up sound
pygame.mixer.init()
goodscan = pygame.mixer.Sound('/home/pi/Desktop/goodscan.wav')
duplicatescan = pygame.mixer.Sound('/home/pi/Desktop/duplicateScan.wav')
badscan = pygame.mixer.Sound('/home/pi/Desktop/badScan.wav')
#function that the USB listener calls
def scan(scanner):
#some scanner processing codes here
if prevScan == x:
duplicatescan.play()
print("Duplicate Scan")
continue;

else:
splits = x.split('-')
if(len(splits) < 3):
print("No prefix provided")
#write to error log
badscan.play();
continue;
prefix = splits[0][0] + splits[0][1]
po = splits[1] + '-' + splits[2]
scanner_number = splits[0][2] + splits[0][3]
polist.extend([po, prefixes[prefix], scanner_number])
goodscan.play()

#DB insert (this always works)                
scans = {
"timestamp": time_str,
"ponum": x,
"status": polist[1],
"scanner": polist[2]
}
statusUpdate.databaseUpdate(polist)

我如何调试为什么这在守护程序模式下不起作用?

我猜这与从Raspberry Pi操作系统到Linux内核5.4的转变有关(旧的Pi运行的是内核4.19(。我使用pip升级到Pygame 1.9.6,它在停止或重新启动服务时将此错误添加到系统日志中

9月3日08:40:46 raspberrypi内核:[1164439.999815]bcm2835_audio bcm2835_audio:无法关闭VCHI服务连接(状态=1(

Kingsley在一条评论中问这是在哪个用户下运行的,答案是root(我从未在系统服务文件中指定用户(。然而,我注意到,Thonny在";pi";使用者我觉得打一针可能会奏效,所以我添加了

User=pi

到我的服务文件,现在Pygame音频在服务中再次工作。

相关内容

最新更新