[RESOLU] Exécution script python via page web
Posté : dim. 12 nov. 2017 19:09
Bonjour à tous,
j'ai depuis peu acquis un Raspberry PI et étant un débutant sur linux j'éprouve quelques difficultés. Notamment pour exécuter un script python via une page web, je m'explique :
Je souhaite gérer la position d'un servomoteur via un script php qui appellerai un script python. Pour m'exercer je souhaite donc pour le moment simplement allumer une LED depuis une page php.
J'ai donc installé mon serveur apache 2, placé le script python (test.py) suivant dans le répertoire /var/www/html :
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(16, GPIO.OUT)
GPIO.output(16, GPIO.HIGH)
time.sleep(5)
GPIO.cleanup()
Mon script php ('servo.php') appelant le programme est le suivant et lui aussi dans le répertoire /var/www/html :
<?php
echo exec('whoami');
exec('sudo python /var/www/html/test.py');
exit();
?>
Lorsque j'exécute mon programme python depuis le raspberry avec la commande 'sudo python /var/www/html/test.py', pas de soucis ma LED s'allume bien.
Mais lorsque sur mon PC sur le même réseau local je souhaite exécuter mon script php via "adresseIPraspberry\servo.php" ma LED ne s'allume pas mais j'ai bien le résultat de ma commande "whoami" : www-data
En cherchant sur internet, j'ai été amené à changer les droits sur mon fichier test.py qui sont maintenant les suivants : -rwxrwxrwx 1 pi pi (En changeant pi par www-data le problème est le même).
J'ai également ajouté la ligne suivante dans mon fichier /etc/sudoers : www-data ALL=(ALL) NOPASSWD : /var/www/html/test.py dans la section #User privilege specification
Mais rien de nouveau.
Plus étrange, lorsque je remplace mon script python par un simple "print('test')" et en ajoutant "echo" devant ma commande exec de mon script php, le 'test' s'affiche bien comme si mon script python était bien exécuté.
J'ai donc essayé d'ajouter des print un peu partout dans mon programme test.py et ils s'affichent correctement jusqu'à la ligne "GPIO.setup(16, GPIO.OUT)".
J'ai déjà fait pas mal de recherches et ne comprend pas vraiment d'où pourrait venir le problème (bibliothèque GPIO inaccessible depuis user www-data ?).
Merci d'avance pour votre aide.
j'ai depuis peu acquis un Raspberry PI et étant un débutant sur linux j'éprouve quelques difficultés. Notamment pour exécuter un script python via une page web, je m'explique :
Je souhaite gérer la position d'un servomoteur via un script php qui appellerai un script python. Pour m'exercer je souhaite donc pour le moment simplement allumer une LED depuis une page php.
J'ai donc installé mon serveur apache 2, placé le script python (test.py) suivant dans le répertoire /var/www/html :
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(16, GPIO.OUT)
GPIO.output(16, GPIO.HIGH)
time.sleep(5)
GPIO.cleanup()
Mon script php ('servo.php') appelant le programme est le suivant et lui aussi dans le répertoire /var/www/html :
<?php
echo exec('whoami');
exec('sudo python /var/www/html/test.py');
exit();
?>
Lorsque j'exécute mon programme python depuis le raspberry avec la commande 'sudo python /var/www/html/test.py', pas de soucis ma LED s'allume bien.
Mais lorsque sur mon PC sur le même réseau local je souhaite exécuter mon script php via "adresseIPraspberry\servo.php" ma LED ne s'allume pas mais j'ai bien le résultat de ma commande "whoami" : www-data
En cherchant sur internet, j'ai été amené à changer les droits sur mon fichier test.py qui sont maintenant les suivants : -rwxrwxrwx 1 pi pi (En changeant pi par www-data le problème est le même).
J'ai également ajouté la ligne suivante dans mon fichier /etc/sudoers : www-data ALL=(ALL) NOPASSWD : /var/www/html/test.py dans la section #User privilege specification
Mais rien de nouveau.
Plus étrange, lorsque je remplace mon script python par un simple "print('test')" et en ajoutant "echo" devant ma commande exec de mon script php, le 'test' s'affiche bien comme si mon script python était bien exécuté.
J'ai donc essayé d'ajouter des print un peu partout dans mon programme test.py et ils s'affichent correctement jusqu'à la ligne "GPIO.setup(16, GPIO.OUT)".
J'ai déjà fait pas mal de recherches et ne comprend pas vraiment d'où pourrait venir le problème (bibliothèque GPIO inaccessible depuis user www-data ?).
Merci d'avance pour votre aide.