Recientemente configuré Python para trabajar con lighttpd a través de CGI (ver aquí ). Pero en el momento en que incluyo RPi.GPIO , el script deja de ejecutarse (supongo que no se genera HTML), pero no hay salida de error en el registro de errores ( /var/log/lighttpd/error.log
).
gpio.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>"
¿Por qué no se ejecuta el script? ¿Es por los permisos? ¿Seguramente, incluir la biblioteca no debería requerir ningún permiso especial? ¿Por qué no hay ninguna salida de error en el script o en el registro de errores?
import RPi.GPIO as GPIO
realmente requiere privilegios de root! Ahora supongo que necesito que lighttpd se ejecute como root (es solo un proyecto casero).Respuestas:
Puede intentar agregar antes de 'importar RPi.GPIO':
Puede ser útil diagnosticar un error.
Y agregue estas líneas antes de su salida html:
Ver http://docs.python.org/library/cgi.html
fuente
Después de seguir los consejos de okertanov, descubrí que en realidad no se puede usar
RPi.GPIO
en un script Python CGI, ya que requiere acceso de root. Resolví el problema llamando a lagpio
aplicación de línea de comandos que se incluye como parte de WiringPi , esto se puede llamar desde una cuenta no root.fuente
#
significa un comentario en PythonSolo usa
Ahora deberás resolver el problema de permisos
fuente
Este tutorial recomienda crear una copia especial de Python y otorgarle privilegios de usuario root, de esta manera:
Y luego, para hacer su CGI, vaya
sudo nano /etc/lighttpd/lighttpd.conf
y busque donde sea que esté dirigiendo.py
archivos y cambie/usr/bin/python/
al nuevo/usr/bin/pythonRoot
/fuente