/var/log/lighttpd/error.log
)中没有错误输出。 .py import RPi.GPIO as GPIO
print "<html>"
print "\t<head>"
print "\t\t<title>GPIO</title>"
print "\t</head>"
print "\t<body>"
print "\t\t<p>"
print "\t\t\tGPIO #17 status: "
print "\t\t</p>"
print "\t</body>"
print "</html>"
为什么脚本未执行?是因为权限?当然,包括该库不应该要求任何特殊权限吗?为什么脚本或错误日志中没有任何错误输出?
#1 楼
您可以尝试在“导入RPi.GPIO”之前添加:import sys
sys.stderr = sys.stdout
try:
import RPi.GPIO as GPIO
except Exception as e:
print e
这可能有助于诊断错误。
并添加以下行在HTML输出之前:
print "Content-Type: text/html" # HTML is following
print # blank line, end of headers
请参见http://docs.python.org/library/cgi.html
#2 楼
遵循okertanov的建议后,我发现您实际上无法在python CGI脚本中使用RPi.GPIO
,因为它需要root访问权限。我通过调出WiringPi附带的gpio
命令行应用程序来解决此问题,可以从非root帐户调用该应用程序。 # Read the GPIO pin using the gpio application
import subprocess as s
def ReadGpio(pin) :
process = s.Popen(["/usr/local/bin/gpio", "-g", "read", pin], stdout = s.PIPE)
data, _ = process.communicate()
data = str.replace(data, “\r”, “”)
data = str.replace(data, “\n”, “”)
return data
#3 楼
#
表示在Python中的注释只需使用
import RPi.GPIO as GPIO
现在您需要解决权限问题
评论
抱歉,这是我的错误,我复制了代码,并将该行注释掉。我已将其从原始问题中删除。
–马克·英格拉姆
2012年8月3日在8:49
#4 楼
本教程建议创建一个特殊的Python副本并为其授予root用户特权,如下所示:是您要从中定向
sudo nano /etc/lighttpd/lighttpd.conf
文件并将.py
更改为新的/usr/bin/python/
/
评论
这可能是所包含文件或文件位置的以下权限/所有权中的一个或两个。要解决此问题,请尝试将包含的文件移至与您尝试运行的文件相同的目录,并确保该文件与您正在运行的脚本属于同一用户。如果这解决了问题,请通知我们,我们可以指导您进一步设置权限/所有权和设置包含搜索路径。我是Python的新手,RPi.GPIO是实际文件吗(在哪里)? \ cgi-bin \ gpio.py由pi:pi拥有,并且www目录的权限为www-data:www-data。
好的,需要控制GPIO引脚的任何文件都需要以root身份运行(当通过网络完成时,这将打开一个安全漏洞)。话虽如此,如果您使脚本从命令行运行,然后再尝试让lighttpd和CGI以root用户身份运行,您将可以更轻松地调试所有问题。要安装RPi.GPIO模块,请遵循以下指示:Learn.adafruit.com/…。您有电子经验吗?您要如何处理GPIO引脚
啊,我已经测试过了,导入RPi.GPIO的简单脚本作为GPIO实际上确实需要root权限!现在我想我需要获得lighttpd才能以root用户身份运行(这只是一个家庭项目)。
将此选项作为以root用户身份运行的选项stackoverflow.com/questions/89228/…