2013-10-12 42 views
0

我想从cgi python脚本运行标准的python os.system调用。 这是教程的一部分,所以脚本非常简单。我正尝试用Raspberry Pi相机拍照并将其显示在网页上。从网络服务器运行系统调用

import os, sys 

os.system('raspistill -o /var/www/images/image.jpg') 

print "Content-type:text/html\r\n\r\n" 
print '<html>' 
print '<head>' 
print '<title>Hello Word - First CGI Program</title>' 
print '</head>' 
print '<body>' 
print '<h2>Hello Word! This is my first CGI program</h2>' 
print '<img src="/var/www/images/image.jpg"/>' 
print '</body>' 
print '</html>' 

运行系统命令时(在浏览器中打开),我得到的错误是:
*未能打开vchiq实例”

我看到的这另一个问题了,说什么有关http deamon作为错误的用户运行,但我不确定这是什么意思 当我以标准用户身份运行脚本时,脚本运行正常

回答

0

大多数Web服务器都以Web用户身份运行。例如www-data。 计算机中的所有文件呃拥有它们的所有权和许可数据,这些数据可以允许或禁止来自不同用户的某些操作 - 例如只有超级用户(root)才能运行poweroff应用程序来关闭计算机。

你应该做的是找到你要运行的可执行文件which raspistill。这将返回可执行文件的位置。接下来,您应该使用ls -l `which raspistill`检查文件权限,并查看显示为-rwxr-xr--(这是一个通用权限集,您可能会有所不同)的所有者数据和文件权限。第1个3表示文件所有者的读写执行权限,接下来的3个字符仅表示用户组的Read和eXecute权限,最后3个字符仅表示“其他”用户的读取权限。

如果该文件的所有者不是www数据,你可以做几件事情,如改变使用chown <user> <file>,我不建议或增加执行权限为“其他”用户与chmod o+x `which raspistill`设置文件所有权信息。

如果问题确实带有权限 - 这应该可以解决您的问题。

其他信息:

http://www.computerhope.com/unix/uchmod.htm

http://www.ss64.com/bash/chmod.html

1

我固定它。

Web服务器可以访问raspistill命令,但该命令使用了它无法访问的视频设备。我将www数据用户添加到视频和音频组,以便我可以播放音频和拍照。我还必须更改一些组在我的网站目录中的某些文件夹。 我不得不修复的最后一件事是,os.system()调用返回了一些东西,这给浏览器显示网页带来了一些问题。它只显示文字。我现在使用子进程模块,并且初始代码似乎工作。我的简单测试代码在这里:

import os, sys 

import subprocess 

#output = subprocess.check_output("raspistill -o /var/www/images/image.jpg",  shell=True) 
#os.system('raspistill -v -o /var/www/images/image.jpg') 

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

output = "" 
output2 = "" 
# Get data from fields 
if form.getvalue('speak_en'): 
    output = subprocess.check_output("espeak \"%s\"" % (form.getvalue('speak')), shell=True) 

if form.getvalue('picture'): 
    output2 = subprocess.check_output("raspistill -o /var/www/images/image.jpg", shell=True) 


print """\ 
Content-type:text/html\n 
<html> 
<head> 
<title>Hello Word - First CGI Program</title> 
</head> 
<body> 
<h2>Select photo or speak</h2> 
<form action=\"/cgi-bin/hello.py\" method=\"post\"> 
<input type=\"checkbox\" name=\"speak_en\" value=\"on\" /> 
Speak: <input type=\"text\" name=\"speak\"><br /> 
Take picture: 
<input type=\"checkbox\" name=\"picture\" value=\"on\" /> 
<br /> 
<input type=\"submit\" value=\"Submit\" /> 
</form> 
<img src=\"../images/image.jpg\" width=640 height=480> 
<p>Speak output: %s</p> 
<p>Picture output: %s</p> 
</body> 
</html> 
""" % (output, output2) 
+0

我有同样的问题。将www-data用户添加到视频组并重新启动lighttpd解决了问题。 – Snorfalorpagus