Ich habe kürzlich Python so eingerichtet, dass es mit lighttpd über CGI funktioniert (siehe hier ). Aber sobald ich RPi.GPIO einbinde , wird das Skript nicht mehr ausgeführt (ich gehe davon aus, dass kein HTML ausgegeben wird), aber es gibt keine Fehlerausgabe im Fehlerprotokoll ( /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>"
Warum wird das Skript nicht ausgeführt? Liegt es an Berechtigungen? Sicher, einschließlich der Bibliothek sollten keine besonderen Berechtigungen erforderlich sein? Warum wird weder im Skript noch im Fehlerprotokoll ein Fehler ausgegeben?
import RPi.GPIO as GPIO
Root-Rechte erforderlich! Jetzt muss ich wohl lighttpd als root ausführen (es ist nur ein Heimprojekt).Antworten:
Sie können versuchen, Folgendes hinzuzufügen, bevor Sie 'RPi.GPIO importieren':
Es kann hilfreich sein, einen Fehler zu diagnostizieren.
Und fügen Sie diese Zeilen vor Ihrer HTML-Ausgabe hinzu:
Siehe http://docs.python.org/library/cgi.html
quelle
Nachdem ich den Rat von okertanov befolgt hatte, stellte ich fest, dass Sie
RPi.GPIO
ein Python-CGI-Skript nicht verwenden können, da es Root-Zugriff erfordert. Ich habe das Problem umgangen , indem ich diegpio
Kommandozeilen-App aufgerufen habe , die als Teil von WiringPi enthalten ist. Diese kann von einem Nicht-Root-Konto aus aufgerufen werden.quelle
#
bedeutet einen Kommentar in PythonBenutz einfach
Jetzt müssen Sie das Berechtigungsproblem lösen
quelle
In diesem Lernprogramm wird empfohlen, eine spezielle Kopie von Python zu erstellen und ihm Root-Benutzerrechte zu erteilen.
Und dann, um Ihr CGI zu erstellen , gehen Sie zu
sudo nano /etc/lighttpd/lighttpd.conf
und suchen Sie, wo immer es sich befindet. Sie leiten.py
Dateien von und wechseln/usr/bin/python/
auf das neue/usr/bin/pythonRoot
/quelle