ejecutando el script Python en PHP e intercambiando datos entre los dos

¿Es posible ejecutar un script de Python dentro de PHP y transferir variables entre sí?

Tengo una clase que recorta los sitios web para obtener datos de una manera global determinada. Quiero que sea mucho más específico y ya tengo scripts de Pythons específicos para varios sitios web.

Estoy buscando una manera de incorporar a aquellos dentro de mi clase.

¿Es posible una transferencia de datos segura y confiable entre los dos? Si es así, ¿qué tan difícil es conseguir que algo así funcione?

Por lo general, puede comunicarse entre idiomas utilizando formatos de idiomas comunes y utilizando stdin y stdout para comunicar los datos.

Ejemplo con PHP / Python usando un argumento de shell para enviar los datos iniciales a través de JSON

PHP:

 // This is the data you want to pass to Python $data = array('as', 'df', 'gh'); // Execute the python script with the JSON data $result = shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data))); // Decode the result $resultData = json_decode($result, true); // This will contain: array('status' => 'Yes!') var_dump($resultData); 

Pitón:

 import sys, json # Load the data that PHP sent us try: data = json.loads(sys.argv[1]) except: print "ERROR" sys.exit(1) # Generate some data to send to PHP result = {'status': 'Yes!'} # Send it to stdout (to PHP) print json.dumps(result) 

Está buscando “comunicación entre procesos” (IPC); podría usar algo como XML-RPC, que básicamente le permite llamar a una función en un proceso remoto, y maneja la traducción de todos los tipos de datos de argumentos entre idiomas (por lo que podría llamar a una función PHP desde Python, o viceversa, siempre que los argumentos sean de un tipo admitido )

Python tiene un servidor XML-RPC integrado y un cliente

La biblioteca phpxmlrpc tiene un cliente y un servidor

Hay ejemplos tanto para el servidor y cliente de Python como para un cliente y servidor de PHP.

La mejor opción es ejecutar python como un subproceso y capturar su salida, luego analizarla.

 $pythonoutput = `/usr/bin/env python pythoncode.py`; 

El uso de JSON probablemente ayudaría a facilitar la producción y el análisis en ambos idiomas, ya que es estándar y ambos idiomas lo admiten (bueno, al menos las versiones no antiguas lo hacen). En Python,

 json.dumps(stuff) 

y luego en PHP

 $stuff = json_decode($pythonoutput); 

También puede guardar explícitamente los datos como archivos, usar sockets o tener muchas formas diferentes de hacerlo más eficiente (y más complicado) según el escenario exacto que necesite, pero esta es la más simple.

Solo tuve el mismo problema y quería compartir mi solución. (Sigue de cerca lo que sugiere Amadan)

pieza de python

 import subprocess output = subprocess.check_output(["php", path-to-my-php-script, input1]) 

también puede hacer: blah = input1 en lugar de simplemente enviar un argumento sin nombre … y luego usar $ _GET [‘blah’].

pieza php

 $blah = $argv[1]; if( isset($blah)){ // do stuff with $blah }else{ throw new \Exception('No blah.'); }