Llamando a Python en PHP

Tengo un script en Python que escribí recientemente y que llamo usando la línea de comandos con algunas opciones. Ahora quiero una interfaz web muy delgada para llamar este script localmente en mi Mac.

No quiero pasar por los problemas menores de instalar mod_python o mod_wsgi en mi Mac, así que solo iba a hacer un sistema () o popen () desde PHP para llamar al script de Python.

¿Alguna idea mejor? ¡Gracias por adelantado!

Dependiendo de lo que estés haciendo, system () o popen () pueden ser perfectos. Use sistema () 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. Use 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 te permitirá leer o escribir, pero no ambos. Si desea ambos, consulte proc_open () , pero con la comunicación bidireccional entre progtwigs, debe tener cuidado para evitar puntos muertos, donde cada progtwig está esperando que el otro haga algo.

Si desea pasar los datos proporcionados por el usuario al script de Python, lo importante a tener en cuenta es la inyección de comandos. Si no tienes cuidado, tu usuario podría enviarte datos como “; evilcommand;” y haz que tu progtwig ejecute comandos arbitrarios contra tu voluntad.

Escapeshellarg () y escapeshellcmd () pueden ayudar con esto, pero personalmente me gusta eliminar todo lo que no sea un buen personaje conocido, usando algo como

preg_replace('/[^a-zA-Z0-9]/', '', $str) 

El operador de backquote también te permitirá ejecutar scripts de Python usando una syntax 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; 

También hay una extensión de PHP: Pip – Python en PHP , que nunca he intentado pero que tenía marcada para tal ocasión.

Puede ejecutar un script de python a través de php, y salidas en el navegador.

Básicamente tienes que 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 de Python, no se mostrarán los resultados en el navegador.

Para que funcionen los códigos completos, visite Cómo ejecutar el script de Python desde PHP y mostrar la salida en el navegador

Hago este tipo de cosas todo el tiempo para scripts rápidos y sucios. Es bastante común tener un script CGI o PHP que solo usa system / popen para llamar a algún progtwig 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.

Tu call_python_file.php debería verse así:

  

Esto ejecuta la secuencia de comandos de python y envía el resultado al navegador. Mientras esté en su script de Python, la variable (sys.argv [1:]) traerá todos sus argumentos. Para mostrar el argv como una cadena de donde está tirando tu php, entonces si quieres hacer un área de texto:

 import sys list1 = ' '.join(sys.argv[1:]) def main(): print list1 if __name__ == '__main__': main() 

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

Los métodos anteriores parecen ser complejos. Usa mi método como referencia.

Tengo estos dos archivos

run.php

mkdir.py

Aquí, he creado una página html que contiene el botón IR. Cada vez que presione este botón, se creará una nueva carpeta en el directorio cuya ruta mencionó.

run.php

     run   

mkdir.py

 #!/usr/bin/env python import os os.makedirs("thisfolder"); 

Si desea ejecutar su script Python en PHP, es necesario realizar este comando en su script php:

 exec('your script python.py')