GNU/Linux >> Tutoriales Linux >  >> Linux

Ejecutar un script de Python desde PHP

Recomiendo usar passthru y manejar el búfer de salida directamente:

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

Probado en Ubuntu Server 10.04. Espero que te ayude también en Arch Linux.

En PHP use la función shell_exec:

Ejecute el comando a través de shell y devuelva la salida completa como una cadena.

Devuelve el resultado del comando ejecutado o NULL si se produjo un error o el comando no produce ningún resultado.

<?php 

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

?>

En el archivo Python test.py , verifique este texto en la primera línea:(vea la explicación shebang):

#!/usr/bin/env python

Si tiene varias versiones de Python instaladas, /usr/bin/env se asegurará de que el intérprete utilizado sea el primero en el $PATH de su entorno. La alternativa sería codificar algo como #!/usr/bin/python; está bien, pero es menos flexible.

En Unix, un archivo ejecutable destinado a ser interpretado puede indicar qué intérprete usar al tener un #! al comienzo de la primera línea, seguido del intérprete (y las banderas que pueda necesitar).

Si está hablando de otras plataformas, por supuesto, esta regla no se aplica (pero esa "línea de shebang" no hace daño, y ayudará si alguna vez copia ese script a una plataforma con base Unix, como Linux, Mac, etc. ).

Esto se aplica cuando lo ejecuta en Unix haciéndolo ejecutable (chmod +x myscript.py) y luego ejecutándolo directamente:./myscript.py, en lugar de solo python myscript.py

Para hacer ejecutable un archivo en plataformas tipo Unix:

chmod +x myscript.py

Además, el archivo Python debe tener los privilegios correctos (ejecución para el usuario www-data/apache si el script PHP se ejecuta en el navegador o curl) y/o debe ser "ejecutable". También todos los comandos en .py el archivo debe tener los privilegios correctos.

Tomado del manual de php:

Solo un recordatorio rápido para aquellos que intentan usar shell_exec en una plataforma tipo aunix y parece que no pueden hacerlo funcionar. PHP se ejecuta como el usuario web en el sistema (generalmente www para Apache), por lo que debe asegurarse de que el usuario web tenga derechos sobre cualquier archivo o directorio que esté tratando de usar en el comando shell_exec. De lo contrario, no parecerá estar haciendo cualquier cosa.


Si desea conocer el estado de retorno del comando y obtener el stdout completo salida que puede en realidad usa exec :

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

$out es una matriz de todas las líneas. $status es el estado de retorno. Muy útil para la depuración.

Si también quieres ver el stderr salida que puede jugar con proc_open o simplemente agregar 2>&1 a tu $command . Esto último suele ser suficiente para que las cosas funcionen y mucho más rápido de "implementar".


Linux
  1. Cómo descargar archivos del servidor SFTP usando el script de python

  2. ¿Comprobar que se está ejecutando un script?

  3. Cómo ejecutar scripts de Python desde shell

  4. ejecutar script php (función php) en linux bash

  5. Configuración del trabajo cron de Godaddy para ejecutar el script php

Cómo ejecutar un script de Python en PHP

¿Cómo ver la salida de un script PHP?

Ejecutando un comando de linux desde python

MYSQL difiere en la salida del script

Llame al script de Python desde bash con argumento

Ejecutando Pycharm como root desde el lanzador