2010-02-08 11 views
13

Estoy tratando de ejecutar un programa de Python usando PHP. Aquí está el códigoObtener PHP para ejecutar un script de Python

$command = '/usr/local/bin/python script.py file'; 
$temp = exec($command, $output); 

Esto funciona a través de la línea de comandos, pero no mientras se ejecuta a través del navegador. Estoy usando Apache, entonces probablemente necesita los privilegios correctos. Soy bastante nuevo en Linux y no tengo idea de cómo hacerlo funcionar.

¡Cualquier ayuda sería apreciada!

Edición 1:

trató de usar proc_open pero no pasa nada. Di el camino completo al guion. Hizo el script ejecutable pero sin suerte. ¿Alguna otra cosa que pueda probar en el servidor? (Es un CentOS 5)

+0

No hacerlo así si tiene cualquier tráfico real. Ejecutar un nuevo script de python (sin mod-python) le costará caro. Configure un servidor de python separado y de larga duración (servidor xml-rpc?) Y llámelo utilizando IPC si necesita escalar. – wisty

+0

¡Gracias! Solo quería hacer esto como una demostración. Sin embargo, para hacer las paces con mod_wsgi/mod_python – Abhinav

Respuesta

6

Es necesario pase la ruta completa a la secuencia de comandos y también debe asegurarse de que la secuencia de comandos sea legible por el usuario que ejecuta el servidor web (lo que significa que cada directorio en la ruta debe ser + x para el usuario web).

+0

Hicieron ambas cosas. No funciona.:( – Abhinav

+0

Solo para cubrir todas las bases, en realidad está imprimiendo $ output, ¿verdad? También debe probar y averiguar si su servidor web se está ejecutando chrooted. – jdizzle

2

pocos puntos de control

  • script.py debe pasar ruta completa, por ejemplo, /home/abhinav/script.py
  • script.py debe ser ejecutable, chmod +x script.py
+4

, "script.py debe ser ejecutable", no si se invoca el intérprete. – LiraNuna

+0

Gracias, y '#!/Usr/local/bin/python' necesitaría en la primera línea de script.py – YOU

+1

No necesita el shebang si usa el intérprete para llamar al script (' python ') – ZeissS

6

dio cuenta de lo que estaba mal:

  1. El dominio se creó como una máquina virtual y se habilitó safe_mode de PHP. proc_open, exec, system, passthru, etc. no funcionan bajo safe_mode, supongo.

  2. Ponga la secuencia de comandos en el directorio accesible por el vhost. Apache no pudo acceder a los directorios fuera de la raíz del documento vhost.

¡Gracias por la ayuda!

+0

podría explicar cómo se configuran los permisos en el punto 2? – slash89mf

0

Para que mi CodeIgniter helper ejecute un script python, tuve que poner #!/Usr/bin/python en la primera línea de mi script python, y NO invocar python del ejecutor.

1 para también hacer chmod + x

Mi ayudante se parece a esto:

<?php 
    function scrape($site, $key, $user_id) 
    { 
     $cmd = str_replace('system/','',BASEPATH).APPPATH."python/spider.py -u $site -k $key -i $user_id"; 
     $resp = exec($cmd, $out); 
     return $out; 
    } 
?> 
Cuestiones relacionadas