Page 1 sur 1

Fonction exec() html

Posté : jeu. 27 oct. 2016 17:15
par Yves4378
Bonjour,
j' un capteur DS18b20 qui me donne bien la valeur de température en terminal :
python DS_1820.py
24.5
J'affiche bien la même température dans une page html en utilisant la fonction
<?php
exec("python DS_1820.py", $tp);
echo("température :".$tp[0]):
?>
J'ai un MCP3008 qui me renvoie bien une valeur analogique en terminal :
python MCP3008.py
5.0
Je fais la même chose en page html :
<,php
exec("python MCP3008.py", $va);
echo("Tension". $va[0]);
?>
Et là pas de valeur affichée, uniquement :tension
Une idée, j'ai dû oublier quelque chose ?
Cordialement
Yves

Re: Fonction exec() html

Posté : jeu. 27 oct. 2016 20:17
par destroyedlolo
Salut,

Alors avant toutes chose, ce n'est pas du HTML mais du PHP ;)
Et là pas de valeur affichée, uniquement :tension
Vérifie ce que renvoie ton script python en avec le code suivant :
<?php
exec("python MCP3008.py", $va);
var_dump($va);
?>

Ensuite on verra ce qui cloche :)

A+

Re: Fonction exec() html

Posté : jeu. 27 oct. 2016 21:00
par Yves4378
Merci de ta réponse rapide.
Effectivement je me suis mal exprimé, c'est du php dans une page html.

En mettant un peu plus de détail :
<?php
exec("python MCP3008.py", $va);
var_dump("Tension :".$va[0]." volts");
?>
l'affichage est :
string(15)"Tension : Volts"
la valeur de $va[0] ne semble pas être renvoyée ?

Re: Fonction exec() html

Posté : jeu. 27 oct. 2016 21:31
par Yves4378
Pour répondre précisément à ta demande :

<?php
exec("python MCP3008.py", $va);
var_dump($va[0]);
?>
affichage :
NULL

<?php
exec("python MCP3008.py", $va);
var_dump($va);
?>
réponse :
array(0) {}

Voilà.

Re: Fonction exec() html

Posté : jeu. 27 oct. 2016 21:55
par destroyedlolo
Yves4378 a écrit : <?php
exec("python MCP3008.py", $va);
var_dump($va);
?>
réponse :
array(0) {}
Ton script ne renvoie donc rien : vu qu'il te donne une valeur lorsque tu le lance dans un shell, je pense donc qu'il y a un pb avec l'environnement qu'il recoit.

Pour le vérifier, tente un

Code : Tout sélectionner

<?php
exec("python MCP3008.py", $va,$rc);
var_dump($va);
var_dump($rc);
?>

Re: Fonction exec() html

Posté : ven. 28 oct. 2016 14:41
par Yves4378
La réponse est :
array(0) {} int(1)

Le problème vient du MCP3008.py, avec tout autre fonction en python ça fonctionne.
Incompatibilité en SPI ??

Re: Fonction exec() html

Posté : ven. 28 oct. 2016 17:08
par destroyedlolo
Yves4378 a écrit :La réponse est :
array(0) {} int(1)
Donc ca prouve bien qu'il y a une erreur car en cas de succes, un script renvoie un code retour de 0.
Si le script est bien foutu, il devrait retourner un code erreur différent en fonction du problème qu'il rencontre : il faut donc où il y aurait un exit(1) (ou qq chose du genre).
Yves4378 a écrit :Le problème vient du MCP3008.py, avec tout autre fonction en python ça fonctionne.
Incompatibilité en SPI ??
J'avais cru comprendre que ton MCP3008.py fonctionnait depuis le shell non ?

Dans tout les cas, le SPI n'a rien a voir la dedans, c'est soit :
  • soit le code ne trouve pas les variables d'environnements qui lui sont nécessaires
  • soit (et y'a de grande chance que ce soit ton problème), c'est par ce que l'utilisateur qui fait tourner ton serveur web n'a pas les droits d'accèder aux GPIO.
Ton Apache devrait tourné avec un utilisateur nommé www-data qui a moins de droit que ton utilisateur a toi.
Tu peux le voir en faisant avec la commande id.
Dans mon cas, ça donne :

Code : Tout sélectionner

laurent@torchwood ~ $ id
uid=1000(laurent) gid=1001(laurent) groupes=1001(laurent),10(wheel),14(uucp),16(cron),18(audio),19(cdrom),27(video),33(www-data),70(postgres),80(cdrw),85(usb),100(users),250(portage)
laurent@torchwood ~ $ id www
uid=33(www-data) gid=33(www-data) groupes=33(www-data),70(postgres)
Donc mon utilisateur perso appartient à 13 groupes alors que www-data à seulement 2. Par exemple, il est incapable d'accéder à un service audio car il ne fait pas parti du groupe du même nom.

Re: Fonction exec() html

Posté : ven. 28 oct. 2016 22:30
par Yves4378
Bonsoir,
D'abord désolé pour la double transmission de mes réponses !
Je teste le serveur web en local et bien sûr j'ai tous les droits.
Le MCP3008.py fonctionne parfaitement en terminal.
Avec cette méthode, je n'ai aucun problème de passage de valeur dans une page html avec l'interface Onewire.
Avec SPI cela ne passe pas quelque soit le script.
Je laisse tomber pour le moment.
En tous cas merci de m'avoir répondu et donné des pistes.
Bonne soirée

Re: Fonction exec() html

Posté : mar. 1 nov. 2016 23:40
par Yves4378
Bonsoir,
La piste des permissions était la bonne.
www-data n'avait pas les droits de spidev(0.0) et spidev(0.1) d'où l'impossibilité d'exécuter la fonction SPi.
En terminal pas de pb puisque j'ai les permissions !
Merci de tes conseils, bonne soirée.

Re: Fonction exec() html

Posté : sam. 7 janv. 2017 10:21
par mic78000
Pour une prochaine fois : j'ai déjà eu ce genre de pb. un sudo devant "python truc.py" fonctionne. Sans doute pas terrible mais permet de débuger.