Tengo una simple función PHP que se supone que para ejecutar un Pyton secuencia de comandos cuando su llamado. He probado este tipo de función varias veces en mis programas en php, pero de alguna manera este momento esta función no está ejecutando la secuencia de comandos de python en todo. Cuando accedo a la secuencia de comandos desde la línea de comandos y ejecutar python testing.py entonces es correctamente ejecutado. Una cosa que quiero mencionar que este guión tiene algunos serios implementaciones de python NLTK de la biblioteca, y tarda más de 20 segundos para ejecutar y realizar sus operaciones (es decir, proceso de datos y el almacenamiento en db). Es este retraso en la ejecución, lo que está causando este problema o es que hay algo que me estoy perdiendo este tiempo?

function success(){
   $mystring = exec('python testing.py');
   $mystring;
   if(!$mystring){

        echo "python exec failed";
            }
   else{
   echo "<br />";
   echo "successfully executed!";
   }
¿Habilitar el informe de errores?
sí, pero no pasó nada. Se mantiene haciendo eco de python exec error (como se supone que debe hacer). Pero una vez que me vaya en la línea de comandos y ejecutar el script, es ejecutado.
Es muy común que exec está deshabilitado en la configuración de php de archivo. Intente comprobar esta pregunta primero para ver si ese es el caso: stackoverflow.com/questions/3938120/check-if-exec-is-disabled
Usted debe actualizar su pregunta a la real el problema, lo que se dijo en un comentario a @lenik la respuesta: Su más acerca de esta secuencia de comandos y la cantidad de tiempo que toma el proceso, es decir, más de 20 segundos. Entonces, Mi pregunta en realidad es que hay alguna función en php que se espera para que el script sea ejecutado por un determinado período de tiempo y luego se mueve hacia adelante, independientemente de la secuencia de comandos de ejecución del éxito o fracaso??
el exec() está habilitado.

OriginalEl autor khan | 2013-03-24

4 Comentarios

  1. 8

    usted tiene que utilizar la ruta de acceso completa para el python y para su archivo. usted puede encontrar el ex de la which python comando, que lo más probable salidas ‘/usr/bin/python’ y usted ya debe saber que el último. así que el comando quedaría así:

    $mystring = exec('/usr/bin/python /home/user/testing.py');

    y usted debe asegurarse de que la secuencia de comandos de python tiene todos los permisos apropiados, debido a que su servidor web es más probable que se ejecuta como un usuario diferente, de modo que los permisos deben ser «-rwxrwxr-x» o algo parecido.

    el punto que estoy haciendo aquí es que he intentado correr un script sencillo a través de la función exacta de éxito() y funcionó. Su más acerca de esta secuencia de comandos y la cantidad de tiempo que toma el proceso, es decir, más de 20 segundos. Entonces, Mi pregunta en realidad es que hay alguna función en php que se espera para que el script sea ejecutado por un determinado período de tiempo y luego se mueve hacia adelante, independientemente de la secuencia de comandos de ejecución del éxito o fracaso??
    Además, asegúrese de que exec está permitido.
    PHP tiene algún tipo de límite, como 30 segundos, usted puede encontrar fácilmente de llamar a phpinfo() y la búsqueda de max_execution_time en la salida. es posible cambiar esto de la secuencia de comandos a un valor más alto, si es necesario, el uso de ini_set('max_execution_time', 1200);, y usted puede conseguir otro detalles acerca de max_execution_time a partir de esta pregunta: stackoverflow.com/questions/4220413/…
    Si no recuerdo mal (que yo no), cuando la ejecución de comandos externos o sleep no cuenta que hacia el tiempo de ejecución, excepto en Windows cajas.

    OriginalEl autor lenik

  2. 1

    intente utilizar la ruta exacta para el programa de python.

    $mystring = exec('python testing.py');
    Se encuentra en el mismo repositorio/carpeta..accesibles directamente.
    exec(‘/usr/bin/python testing.py’);
    probé..no funciona.
    asegúrese de que el real camino correcto en nuestro sistema.

    OriginalEl autor Ryan Knopp

  3. 0

    Pruebe a quitar el $mystring; línea

    function success() {
       $mystring = exec('python testing.py');
       if(!$mystring){
           echo "python exec failed";
       } else {
           echo "<br />";
           echo "successfully executed!";
       }
    }

    Para propósitos de prueba probar:

    function success() {
       $mystring = exec('python testing.py', $output);
       var_dump($output);
    }
    Buen ojo, pero no creo que realmente afectan: codepad.viper-7.com/KT2UDx
    probé..no funciona bien.
    Ah… Mike es correcto 🙂
    ¿cuál es la secuencia de comandos de regresar? Usted puede almacenar el resultado para comprobar… exec(‘python testing.py’, $salida) – he actualizado la respuesta a mostrar de qué estoy hablando.
    Creo que var_dump sería preferible en este caso

    OriginalEl autor doitlikejustin

  4. 0

    No hay ningún problema con el exec() o cualquier cosa.

    El problema es que la nltk módulo no es capaz de localizar el nltk_data directorio. Para ello simplemente busque donde el nltk_data está presente en su sistema: generalmente ~/nltk_data.

    Ahora importa añadir que la ruta de acceso cuando ejecuta la función.

    importación nltk;

    Ahora, nltk.de datos.path es una lista de lugares donde buscar los módulos.

    Usted puede hacer nltk.de datos.ruta de acceso.append(«su ubicación/directorio»);

    OriginalEl autor Javesh

Dejar respuesta

Please enter your comment!
Please enter your name here