GNU/Linux >> Tutoriels Linux >  >> Linux

Exécuter un script Python à partir de PHP

Je recommande d'utiliser passthru et gérer directement le tampon de sortie :

ob_start();
passthru('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');
$output = ob_get_clean(); 

Testé sur Ubuntu Server 10.04. J'espère que cela vous aidera également sur Arch Linux.

En PHP, utilisez la fonction shell_exec :

Exécutez la commande via le shell et renvoyez la sortie complète sous forme de chaîne.

Il renvoie la sortie de la commande exécutée ou NULL si une erreur s'est produite ou si la commande ne produit aucune sortie.

<?php 

$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;

?>

Dans le fichier Python test.py , vérifiez ce texte en première ligne :(voir shebang expliquer) :

#!/usr/bin/env python

Si plusieurs versions de Python sont installées, /usr/bin/env garantira que l'interpréteur utilisé est le premier sur le $PATH de votre environnement. L'alternative serait de coder en dur quelque chose comme #!/usr/bin/python; c'est bien, mais moins flexible.

Sous Unix, un fichier exécutable destiné à être interprété peut indiquer quel interpréteur utiliser en ayant un #! au début de la première ligne, suivi de l'interpréteur (et des drapeaux dont il peut avoir besoin).

Si vous parlez d'autres plates-formes, bien sûr, cette règle ne s'applique pas (mais cette "ligne shebang" ne fait aucun mal et vous aidera si jamais vous copiez ce script sur une plate-forme avec une base Unix, telle que Linux, Mac, etc. ).

Cela s'applique lorsque vous l'exécutez sous Unix en le rendant exécutable (chmod +x myscript.py) puis en l'exécutant directement :./myscript.py,plutôt que simplement python myscript.py

Pour rendre exécutable un fichier sur les plateformes de type unix :

chmod +x myscript.py

De plus, le fichier Python doit avoir les privilèges corrects (exécution pour l'utilisateur www-data / apache si le script PHP s'exécute dans le navigateur ou curl) et/ou doit être "exécutable". Aussi toutes les commandes dans .py le fichier doit avoir les privilèges corrects.

Extrait du manuel php :

Juste un petit rappel pour ceux qui essaient d'utiliser shell_exec sur une plate-forme de type aunix et qui n'arrivent pas à le faire fonctionner. PHP s'exécute en tant qu'utilisateur Web sur le système (généralement www pour Apache), vous devez donc vous assurer que l'utilisateur Web a des droits sur tous les fichiers ou répertoires que vous essayez d'utiliser dans la commande shell_exec. Sinon, il n'apparaîtra pas faire n'importe quoi.


Si vous souhaitez connaître l'état de retour de la commande et obtenir l'intégralité du stdout sortie vous pouvez utilisez réellement exec :

$command = 'ls';
exec($command, $out, $status);

$out est un tableau de toutes les lignes. $status est le statut de retour. Très utile pour le débogage.

Si vous voulez aussi voir le stderr sortie, vous pouvez jouer avec proc_open ou simplement ajouter 2>&1 à votre $command . Ce dernier est souvent suffisant pour faire fonctionner les choses et beaucoup plus rapide à "implémenter".


Linux
  1. Vérifier qu'un script est en cours d'exécution ?

  2. Comment exécuter des scripts Python à partir du shell

  3. Script PHP - détecter s'il s'exécute sous Linux ou Windows ?

  4. Exécution du script PHP à partir de la ligne de commande en tant que processus d'arrière-plan

  5. Configuration de la tâche Godaddy cron pour exécuter le script php

Comment exécuter un script Python en PHP

Empêcher un script bash de s'exécuter simultanément

Comment télécharger des fichiers à partir du serveur SFTP à l'aide d'un script python

Comment voir la sortie d'un script Php ?

valeur de retour du script python au script shell

Faire (installer à partir de la source) python sans exécuter de tests