一点背景:我有一个运行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上,并将所有内容都移到另一个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 OS到Linux内核5.4的转变有关(旧的Pi运行的是内核4.19)。我使用pip升级到PyGame1.9.6,这在停止或重新启动服务时将此错误添加到系统日志中
金斯利在评论中问这是在哪个用户下运行的,答案是root(我从未在系统服务文件中指定过用户)。然而,我注意到Thonny在“pi”用户下运行。我想打一针可能有用,所以我补充说
到我的服务文件,现在Pygame音频在服务中再次工作
相关问题 更多 >
编程相关推荐