2010-02-08 32 views
13

Sto provando a eseguire un programma Python utilizzando PHP. Ecco il codiceOttenere PHP per eseguire uno script Python

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

Questo funziona tramite la riga di comando ma non durante l'esecuzione attraverso il browser. Sto usando Apache quindi probabilmente ha bisogno dei privilegi giusti? Sono abbastanza nuovo a Linux e non ho idea di come farlo funzionare.

Qualsiasi aiuto sarebbe apprezzato!

Edit 1:

provato ad usare proc_open ma non succede nulla. Ho dato il percorso completo alla sceneggiatura. Realizzato lo script eseguibile ma senza fortuna. Qualche altra cosa che posso provare sul server? (E 'una CentOS 5)

+0

non farlo in questo modo se avete qualsiasi traffico reale. L'esecuzione di un nuovo script Python (senza mod-python) ti costerà caro. Configurare un server python separato a lungo funzionamento (server xml-rpc?) E chiamarlo usando IPC se è necessario ridimensionarlo. – wisty

+0

Grazie! Volevo solo farlo come una demo. Ancora per orientarmi mod_wsgi/mod_python – Abhinav

risposta

6

È necessario passa il percorso completo allo script e devi anche assicurarti che lo script sia leggibile dall'utente che esegue il server web (il che significa che ogni directory nel percorso deve essere + x per l'utente web).

+0

Hanno fatto entrambe le cose. Non funziona.:( – Abhinav

+0

Solo per coprire tutte le basi, in realtà stai stampando $ output, giusto? Dovresti anche provare a scoprire se il tuo server web sta funzionando in chroot – jdizzle

2

Pochi posti di blocco

  • script.py dovrebbe passare il percorso completo, ad esempio, /home/abhinav/script.py
  • script.py dovrebbe essere eseguibile, chmod +x script.py
+4

"script.py dovrebbe essere eseguibile" non se l'interprete è invocato. – LiraNuna

+0

Grazie, e '#!/Usr/local/bin/python' sarebbe necessario nella prima riga di script.py – YOU

+1

Non è necessario lo shebang se si utilizza l'interprete per chiamare lo script (' python ') – ZeissS

6

capito che cosa era sbagliato:

  1. Il dominio è stato impostato come un host virtuale e safe_mode di PHP è stato attivato. proc_open, exec, system, passthru ecc. non funzionano in safe_mode, immagino.

  2. Inserire lo script nella directory accessibile dal vhost. Apache non è stato in grado di accedere alle directory al di fuori della radice del documento vhost.

Grazie per l'aiuto!

+0

potresti spiegare come imposti i permessi al punto 2? – slash89mf

0

Per ottenere il mio helper CodeIgniter per eseguire uno script python, ho dovuto mettere #!/Usr/bin/python sulla prima riga del mio script python e NON chiamare python da exec.

+1 per fare anche chmod + x

il mio aiuto si presenta così:

<?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; 
    } 
?> 
Problemi correlati