Impossible d’exécuter un script Python à partir d’un document PHP

Je lance un document PHP sur un serveur Apache sur mon Raspberry Pi et je souhaite qu’il exécute un fichier en cliquant sur un bouton. J’ai mis des commandes echo sous la commande pour que le fichier s’exécute et il imprime mais le fichier ne s’exécute pas. Les fichiers index.php et lightson.py et lightsoff.py se trouvent tous dans le même répertoire ( / var / www ) et j’ai ajouté #! / Usr / bin / env python au début des deux fichiers et les a rendus exécutables par en utilisant chmod + x lightson.py . Si je lance la commande depuis le shell, cela fonctionne et allume la lumière comme je le souhaite avec la même commande que dans le fichier, mais elle ne s’exécutera pas dans la commande. Le code:

  Light Controller   
 

comme vous l’avez dit, vous l’exécutez comme apache->php->shell_exec(SUDO..)

Donc, l’utilisateur apache doit être dans le fichier sudoers, mieux vaut ne pas donner sudo à apache mais plutôt donner à l’utilisateur apache (www-data) le droit d’exécuter votre programme python

mettre la première ligne dans votre script python: #!/usr/bin/env python afin que le script sache quel programme l’ouvrira avec ..

puis

changer de groupe:

 chgrp www-data /path/to/python-script.py 

le rendre exécutable

 chmod +x /path/to/python-script.py 

l’essayer

 shell_exec("/path/to/python-script.py"); 

J’espère que ca fonctionne 😉

TIPP: Apache et PHP sont pour la livraison de Documents and Ssortingngs , si vous souhaitez un contrôle et une API avec nodejs et https://www.npmjs.com/package/rpi-gpio . De cette façon, vous aurez une place pour votre environnement d’automatisation solide

Cela a fonctionné pour moi:

test.php

  

test.py

 f = open("test.txt", "a+") f.write("hiya buddy!!\n") f.close() print "some output" 

Voici la sortie pertinente de ls -l de /var/www/html :

 jason@Jason-one /var/www/html $ ls -l -rw-r--r-- 1 jason jason 44 Sep 20 18:12 test.php -rwxr-xr-x 1 jason jason 82 Sep 20 17:44 test.py -rw-rw-rw- 1 jason jason 38 Sep 20 18:15 test.txt 

Comme je n’ai pas de broches GPIO sur mon ordinateur portable, j’ai décidé d’écrire dans un fichier comme test. Remarquez que je n’ai pas eu à utiliser sudo raison de la façon dont je configure les permissions sur test.py