Es posible ejecutar una secuencia de comandos de Python dentro de PHP y la transferencia de las variables de cada uno de los otros ?

Tengo una de clase que los restos de los sitios web de los datos en un cierto modo global. yo quiero hacer es ir mucho más específico y ya han pitones scripts específicos para varios sitio web.

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

Es seguro y confiable de transferencia de datos entre los dos, incluso es posible ? si así lo difícil que es conseguir algo como eso ?

  • se puede hacer, utilizando la línea de comandos (cli), exec (), etc
  • Gracias a todos por la ayuda
InformationsquelleAutor Neta Meta | 2012-12-27

4 Comentarios

  1. 60

    Generalmente se pueden comunicar entre idiomas mediante el uso de lenguaje común de los formatos, y el uso de stdin y stdout para comunicar los datos.

    Ejemplo con PHP/Python usando un shell argumento 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);

    Python:

    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)
    • php ejemplo de esto es bastante simple
    • No hay nada difícil, no hay! Mientras usted se pega con el estándar de estructuras de datos (string, int, matriz, diccionario, boolean, float), este enfoque le permitirá pasar cualquier cosa que usted necesita.
    • Donde se supone que debe ser script.py? tengo null en php de la página!
    • Se puede también dar ejemplo de envío de datos desde python, php, por favor?
    • es el mismo de la respuesta
    • Si usted está experimentando la NULL retorno de la secuencia de comandos de python, puede significar que escapeshellarg() es tomar las comillas dobles lejos de la codificado en JSON, representación JSON válido, por lo tanto, causando json.loads() a fallar. Trate de usar base64_encode(); en lugar de escapeshellarg(); en php y import base64/base64.b64decode() en python. Además, no te olvides de envolver su ruta de acceso entre comillas si contiene espacios 'python "path/that/has spaces/script.py" ' como fue mi caso. Saludos! 🙂
    • Yo estaba perdiendo el doble cita en python sin escapeshellarg(), y escapeshellarg() resuelto ese problema. Aún así, gracias por mencionar base64, voy a tratar de que si tengo más problemas.
    • Esto era muy útil para un novato en Python. Aquí está la salida que he recibido: array(1) { [«estado»]=> string(4) «¡Sí!» } como se esperaba. Gracias.

  2. 10

    Usted está buscando para la «comunicación entre procesos» (IPC) – podría usar algo como XML-RPC, que básicamente te permite llamar a una función en un proceso remoto, y se encarga de la traducción de todo el argumento de tipos de datos entre los distintos idiomas (por lo que podríamos llamar una función de PHP desde Python, o viceversa, siempre y cuando los argumentos son de un tipo compatible)

    Python se ha incorporado un XML-RPC server y un cliente

    La phpxmlrpc biblioteca tiene un cliente y servidor

    Hay ejemplos para ambos, Python servidor y el cliente, y un Cliente PHP y servidor

    • Muchas gracias por la ayuda
  3. 1

    La mejor apuesta que se está ejecutando python como un subproceso y la captura de su salida, luego analizarlo.

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

    El uso de JSON probablemente ayude a hacer que sea fácil de producir y analizar en ambos idiomas, ya que es estándar y ambos idiomas de apoyo (bueno, al menos no de antiguas versiones). En Python,

    json.dumps(stuff)

    y, a continuación, en PHP

    $stuff = json_decode($pythonoutput);

    También puede guardar explícitamente los datos como de los archivos, o el uso de sockets, o tiene muchas maneras diferentes de hacer esto más eficiente (y más complicados), dependiendo de la situación exacta que usted necesita, pero esta es la más sencilla.

  4. 1

    Sólo tenía el mismo problema y quería compartir mi solución. (sigue de cerca lo que Amadan sugiere)

    python pieza

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

    también puede hacerlo en: bla = input1 en lugar de simplemente enviar un anónimo arg… y, a continuación, utilizar el $_GET[‘bla’].

    php pieza

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

Dejar respuesta

Please enter your comment!
Please enter your name here