Niedawno skonfigurowałem Pythona do pracy z lighttpd przez CGI (patrz tutaj ). Ale z chwilą, gdy dołączę RPi.GPIO , skrypt przestaje działać ( zakładam , ponieważ HTML nie otrzymuje danych wyjściowych), ale nie ma danych wyjściowych błędów w dzienniku błędów ( /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>"
Dlaczego skrypt się nie uruchamia? Czy to z powodu uprawnień? Z pewnością, w tym biblioteka nie powinna wymagać żadnych specjalnych uprawnień? Dlaczego w skrypcie lub w dzienniku błędów nie ma żadnych błędów?
import RPi.GPIO as GPIO
faktycznie wymaga uprawnień roota! Teraz myślę, że muszę uruchomić lighttpd, aby działał jako root (to tylko projekt domowy).Odpowiedzi:
Możesz spróbować dodać przed 'import RPi.GPIO':
Może to pomóc zdiagnozować błąd.
I dodaj te wiersze przed wyjściem HTML:
Zobacz http://docs.python.org/library/cgi.html
źródło
Po skorzystaniu z porady okertanova odkryłem, że nie można używać
RPi.GPIO
skryptu CGI w Pythonie, ponieważ wymaga on dostępu do konta root. Obejrzałem ten problem, wywołującgpio
aplikację wiersza polecenia, która jest częścią WiringPi , można ją wywołać z konta innego niż root.źródło
#
oznacza komentarz w PythoniePo prostu użyj
Teraz musisz rozwiązać problem z uprawnieniami
źródło
W tym samouczku zaleca się utworzenie specjalnej kopii języka Python i nadanie mu uprawnień użytkownika root:
A następnie, aby utworzyć swój CGI, przejdź do
sudo nano /etc/lighttpd/lighttpd.conf
i znajdź, gdzie to jest, gdzie kierujesz.py
pliki i przejdź/usr/bin/python/
do nowego/usr/bin/pythonRoot
/źródło