Dependiendo de lo que esté haciendo, system () o popen () pueden ser perfectos. Use system () si la secuencia de comandos de Python no tiene salida o si desea que la salida de la secuencia de comandos de Python vaya directamente al navegador. Utilice popen () si desea escribir datos en la entrada estándar de la secuencia de comandos de Python, o leer datos de la salida estándar de la secuencia de comandos de Python en php. popen () solo le permitirá leer o escribir, pero no ambos. Si desea ambos, consulte proc_open () , pero con la comunicación bidireccional entre programas, debe tener cuidado de evitar interbloqueos, donde cada programa espera que el otro haga algo.
Si desea pasar los datos proporcionados por el usuario a la secuencia de comandos de Python, entonces lo más importante a tener en cuenta es la inyección de comandos. Si no tiene cuidado, su usuario podría enviarle datos como "; evilcommand;" y hacer que su programa ejecute comandos arbitrarios en contra de su voluntad.
escapeshellarg () y escapeshellcmd () pueden ayudar con esto, pero personalmente me gusta eliminar todo lo que no es un buen personaje conocido, usando algo como
preg_replace('/[^a-zA-Z0-9]/', '', $str)
El operador de comillas inversas también le permitirá ejecutar scripts de Python con una sintaxis similar a la anterior.
En un archivo de Python llamado python.py:
hello = "hello" world = "world" print hello + " " + world
En un archivo php llamado python.php:
$python = `python python.py`; echo $python;
fuente
También hay una extensión de PHP: Pip - Python en PHP , que nunca probé, pero la tenía marcada para tal ocasión.
fuente
Puede ejecutar un script de Python a través de php y salidas en el navegador.
Básicamente, debes llamar al script de Python de esta manera:
$command = "python /path/to/python_script.py 2>&1"; $pid = popen( $command,"r"); while( !feof( $pid ) ) { echo fread($pid, 256); flush(); ob_flush(); usleep(100000); } pclose($pid);
Nota: si ejecuta cualquier time.sleep () en su código Python, no mostrará los resultados en el navegador.
Para que los códigos completos funcionen, visite Cómo ejecutar un script de Python desde php y mostrar la salida en el navegador
fuente
tempmon
y la misma carpeta contiene mi script de Python. Quiero que la aplicación sea portátil, así que puedo copiar latempmon
carpeta debajohtdocs
. Y lo mismo debería funcionar en diferentes máquinas.Hago este tipo de cosas todo el tiempo para guiones rápidos y sucios. Es bastante común tener un script CGI o PHP que solo usa system / popen para llamar a algún programa externo.
Solo tenga mucho cuidado si su servidor web está abierto a Internet en general. Asegúrese de desinfectar su entrada GET / POST en este caso para no permitir que los atacantes ejecuten comandos arbitrarios en su máquina.
fuente
Su call_python_file.php debería verse así:
<?php $item='Everything is awesome!!'; $tmp = exec("py.py $item"); echo $tmp; ?>
Esto ejecuta la secuencia de comandos de Python y envía el resultado al navegador. Mientras que en su script de Python, la variable (sys.argv [1:]) traerá todos sus argumentos. Para mostrar el argv como una cadena para donde sea que su php esté extrayendo, si desea hacer un área de texto:
import sys list1 = ' '.join(sys.argv[1:]) def main(): print list1 if __name__ == '__main__': main()
fuente
Tenga en cuenta que si está utilizando un entorno virtual (como en el alojamiento compartido), debe ajustar su ruta a Python, por ejemplo:
/home/user/mypython/bin/python ./cgi-bin/test.py
fuente
Los métodos anteriores parecen ser complejos. Usa mi método como referencia.
Tengo estos dos archivos
Aquí, he creado una página html que contiene el botón IR. Siempre que presione este botón se creará una nueva carpeta en el directorio cuya ruta ha mencionado.
<html> <body> <head> <title> run </title> </head> <form method="post"> <input type="submit" value="GO" name="GO"> </form> </body> </html> <?php if(isset($_POST['GO'])) { shell_exec("python /var/www/html/lab/mkdir.py"); echo"success"; } ?>
#!/usr/bin/env python import os os.makedirs("thisfolder");
fuente
Si desea ejecutar su secuencia de comandos Python en PHP, es necesario hacer este comando en su secuencia de comandos php:
exec('your script python.py')
fuente
your
con los parámetrosscript
ypython.py
. b) A menos que la secuencia de comandos de Python tenga un estilo adecuado, se debe llamar al intérprete de Python y pasarle el nombre de la secuencia de comandos (python script.py
). Incluso con un shebang adecuado, esto está mal, ya que llamaría en./script.py
lugar de usar el nombre del intérprete.