exec() et script python ?

kunzy
Invité n'ayant pas de compte PHPfrance

18 juil. 2007, 12:09

Bonjour !
Je rencontre un léger problème dans un script php :
le but est de pouvoir sous certaines conditions (après requètes sql, if(machin > ...) ) lancer un script python.
Donc bien naïvement nous avons tenté des choses du genre exec("python script.py > /dev/null").
Le problème est que le script est bien lancé, mais on en sort dès qu'on rencontre certaines fonctions python, du genre communication avec le port série ou time.sleep().
Pour info, ca tourne sur un serveur apache 2 et l'utilisateur www-data a bien les droits pour accéder au port série.

ViPHP
ViPHP | 5924 Messages

18 juil. 2007, 14:40

Essaye
echo exec("python script.py 2->&1");
pour afficher les erreurs.

Invité
Invité n'ayant pas de compte PHPfrance

18 juil. 2007, 15:02

Alors j'ai pas de messages d'erreur (page blanche...) mais toujours pas de résultat. Le problème reste le même : dans le shell, la commande fonctionne, mais passée dans le exec(), pas d'erreur, mais pas de résultat : le script est quitté avant la fin, surement quand il rencontre certaines fonctions.

Par exemple, on arrive à écrire ou lire dans un fichier, mais ouvrir un port série ou simplement faire un time.sleep(5), ca ne va pas plus loin.

ViPHP
ViPHP | 5924 Messages

18 juil. 2007, 15:33

Merde, je me suis gourré dans la syntaxe de la commande, remplace par :
echo exec("python script.py 2>&1");
Sinon, affiche les erreurs php, si ce n'est pas déjà fait dans ton php.ini, mets error_reporting à E_ALL et display_errors à On.

J'espère qu'avec ca on va pouvoir trouver le Saint Graal, en (Monty) python... ==>[]

Invité
Invité n'ayant pas de compte PHPfrance

18 juil. 2007, 15:45

Ah oui comme un con j'avais fait un copié / collé.
Voilà un grand progrès : on a une erreur

serial.serialutil.SerialException: Could not open port: [Errno 13] Permission denied: '/dev/ttyS0'

là le soucis c'est que : on lance le script à distance via un navigateur, donc c'est bien l'utilisateur www-data qui le lance non ? Donc il doit juste faire partie du groupe 'dialout' ?

Control:/opt# adduser www-data dialout
L'utilisateur « www-data » est déjà membre du groupe « dialout ».

Et ça marche pourtant pas ...

kunzy
Invité n'ayant pas de compte PHPfrance

18 juil. 2007, 15:47

:lol: :lol:

Ah oui comme un con j'avais fait un copié / collé.
Voilà un grand progrès : on a une erreur

serial.serialutil.SerialException: Could not open port: [Errno 13] Permission denied: '/dev/ttyS0'

là le soucis c'est que : on lance le script à distance via un navigateur, donc c'est bien l'utilisateur www-data qui le lance non ? Donc il doit juste faire partie du groupe 'dialout' ?

Control:/opt# adduser www-data dialout
L'utilisateur « www-data » est déjà membre du groupe « dialout ».

Et ça marche pourtant pas ...

ViPHP
ViPHP | 5924 Messages

18 juil. 2007, 16:34

là le soucis c'est que : on lance le script à distance via un navigateur, donc c'est bien l'utilisateur www-data qui le lance non ?
Oui
Donc il doit juste faire partie du groupe 'dialout' ?
Surement.

C'est quoi les droits (chown, chgrp, et chmod) du fichier ?

kunzy
Invité n'ayant pas de compte PHPfrance

18 juil. 2007, 16:52

Alors pour être sur de nous, on a mis que le fichier appartenait à www-data et au groupe dialout. On a aussi mis les droit à 7777.

ViPHP
ViPHP | 5924 Messages

18 juil. 2007, 16:52

Vous avez blindé :D

ViPHP
ViPHP | 5924 Messages

18 juil. 2007, 17:06

Essaye avec d'autres fonctions comme shell_exec() si ca ne marche pas...

kunzy
Invité n'ayant pas de compte PHPfrance

18 juil. 2007, 17:08

C'est déjà fait ... :(

Matthis974jump
Invité n'ayant pas de compte PHPfrance

13 juil. 2016, 21:52

Voila ton problème :D :D :

Pour le test fait un

Code : Tout sélectionner

sudo su www-data
et essaie de faire une commande de type sudo et tu vera se qui se passe quand tu execute ta commende !!!!!

Tu vas te rendre compte ( je pense ) de ton erreur !!!!!!!!!!!!

:P 8-) 8-)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

13 juil. 2016, 22:33

(C'était une question posée il y a 9 ans ! J'espère qu'il est passé à autre chose depuis :-D )
Quand tout le reste a échoué, lisez le mode d'emploi...