【问题标题】:Python script won't play sound as cgi, but via command linePython脚本不会像cgi一样播放声音,而是通过命令行播放
【发布时间】:2017-07-12 01:48:36
【问题描述】:

如下所示的 CGI python 脚本 sound.py 通过连接到 Raspberry 音频输出的扬声器播放声音。当我通过“python sound.py”从命令行执行脚本时,声音播放正常。但是,当我尝试通过 Web (http://192.168.1.246/cgi-bin/sound.py) 调用它作为 cgi 脚本触发它时,声音不会播放,浏览器只会显示“Hi Hello World!” (我想这表明服务器至少将其识别为 CGI 脚本并执行它而不会产生错误)。

我认为问题可能与声音文件的权限/所有权有关,并对其进行了修改,但这并没有帮助(我还在下面粘贴了有关脚本本身的所有权和权限的信息和声音文件)。

非常感谢您的帮助!

马克。

-rwxrwxrwx 1 root root 441 Jul 10 23:23 sound.py -rwxr-xr-x 1 root root 29812 Jul 9 22:58 cardinal-short.mp3

脚本(sound.py):

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# enable debugging
import cgitb
cgitb.enable()

import pygame

name = "cardinal-short"
pygame.mixer.init()
pygame.mixer.music.load("/var/www/html/cgi-bin/cardinal-short.mp3")
pygame.mixer.music.play()
pygame.mixer.music.set_volume(1.0)
while (pygame.mixer.music.get_busy() == True):
  continue
pygame.mixer.quit()

print "Content-Type: text/plain;charset=utf-8"
print

print "Hi Hello World!"

【问题讨论】:

  • 如果pygame 在没有 X11 或 TTY 的情况下无法初始化,那就是你的问题。将您的 stdout 和 stderr 记录到文件中将是一个不错的起点。
  • 网络服务器是否连接了音频?您是否希望通过网络浏览器播放音频?
  • @user2357112 - 不确定 Web 服务器是否连接了音频。我该如何检查?我希望从 Raspberry 播放声音,而不是在浏览器中播放。
  • @Charles Duffy - 感谢您的建议。正在尝试进行一些日志记录。
  • 我想的是服务于网络请求的机器,而不是网络服务器程序;如果它是您从命令行成功运行脚本的同一台机器(Raspberry?),我不知道您必须执行任何其他音频设置。

标签: python audio raspberry-pi


【解决方案1】:

我能够通过以下方式解决此问题: sudo usermod -aG 音频 www-数据 然后重启apache。

问题是,我在网上引用elsewhere 的话,“声音设备(在 /dev/snd/ 中)只能由组“audio”的成员访问。pi 是该组的成员,而 www-data 不是。”

感谢所有提供帮助的人。

【讨论】:

  • 如果你能插入一个链接到你从哪里获得信息,那就太好了,这样你就可以感谢原作者
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
相关资源
最近更新 更多