J'ai récemment configuré python pour travailler avec lighttpd via CGI (voir ici ). Mais à la minute où j'inclus RPi.GPIO , le script s'arrête de s'exécuter (je suppose parce qu'aucun HTML ne reçoit de sortie), mais il n'y a pas de sortie d'erreur dans le journal des erreurs ( /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>"
Pourquoi le script ne s'exécute-t-il pas? Est-ce à cause des autorisations? Assurément, y compris la bibliothèque ne devrait pas exiger d'autorisations spéciales? Pourquoi n'y a-t-il pas de sortie d'erreur dans le script ou dans le journal des erreurs?
import RPi.GPIO as GPIO
nécessite des privilèges root! Maintenant, je suppose que je dois faire fonctionner lighttpd en tant que root (c'est juste un projet personnel).Réponses:
Vous pouvez essayer d'ajouter avant «importer RPi.GPIO»:
Il peut être utile de diagnostiquer une erreur.
Et ajoutez ces lignes avant votre sortie html:
Voir http://docs.python.org/library/cgi.html
la source
Après avoir suivi les conseils d'okertanov, j'ai découvert que vous ne pouvez pas réellement utiliser
RPi.GPIO
dans un script CGI python car il nécessite un accès root. J'ai contourné le problème en appelant l'gpio
application de ligne de commande qui est incluse dans le cadre de WiringPi , cela peut être appelé à partir d'un compte non root.la source
#
signifie un commentaire en PythonUtilisez simplement
Vous devez maintenant résoudre le problème des autorisations
la source
Ce tutoriel recommande de créer une copie spéciale de Python et de lui donner des privilèges d'utilisateur root, comme ceci:
Et puis, pour créer votre CGI, allez
sudo nano /etc/lighttpd/lighttpd.conf
et trouvez où vous êtes en train de diriger les.py
fichiers et passez au/usr/bin/python/
nouveau/usr/bin/pythonRoot
/la source