GNU/Linux >> Linux Esercitazione >  >> Linux

Esecuzione di uno script Python da PHP

Consiglio di utilizzare passthru e gestire direttamente il buffer di output:

ob_start();
passthru('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');
$output = ob_get_clean(); 

Testato su Ubuntu Server 10.04. Spero che ti sia d'aiuto anche su Arch Linux.

In PHP usa la funzione shell_exec:

Esegue il comando tramite shell e restituisce l'output completo come stringa.

Restituisce l'output dal comando eseguito o NULL se si è verificato un errore o il comando non produce alcun output.

<?php 

$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;

?>

Nel file Python test.py , verifica questo testo nella prima riga:(vedi spiegazione shebang):

#!/usr/bin/env python

Se hai installato diverse versioni di Python, /usr/bin/env assicurerà che l'interprete utilizzato sia il primo nel $PATH del tuo ambiente. L'alternativa sarebbe codificare qualcosa come #!/usr/bin/python; va bene, ma meno flessibile.

In Unix, un file eseguibile che deve essere interpretato può indicare quale interprete usare avendo un #! all'inizio della prima riga, seguito dall'interprete (e da eventuali flag necessari).

Se stai parlando di altre piattaforme, ovviamente, questa regola non si applica (ma quella "linea shebang" non fa male e ti aiuterà se copi quello script su una piattaforma con una base Unix, come Linux, Mac, ecc. ).

Questo vale quando lo esegui in Unix rendendolo eseguibile (chmod +x myscript.py) e poi eseguendolo direttamente:./myscript.py,piuttosto che solo python myscript.py

Per rendere eseguibile un file su piattaforme di tipo unix:

chmod +x myscript.py

Anche il file Python deve avere i privilegi corretti (esecuzione per l'utente www-data / apache se lo script PHP viene eseguito nel browser o curl) e/o deve essere "eseguibile". Anche tutti i comandi in .py il file deve disporre dei privilegi corretti.

Tratto dal manuale php:

Solo un rapido promemoria per coloro che cercano di utilizzare shell_exec su una piattaforma di tipo aunix e non riescono a farlo funzionare. PHP viene eseguito come utente Web sul sistema (generalmente www per Apache), quindi è necessario assicurarsi che l'utente Web abbia i diritti su qualsiasi file o directory che si sta tentando di utilizzare nel comando shell_exec. In caso contrario, non sembrerà fare qualsiasi cosa.


Se vuoi conoscere lo stato di ritorno del comando e ottenere l'intero stdout output che puoi effettivamente usa exec :

$command = 'ls';
exec($command, $out, $status);

$out è un array di tutte le righe. $status è lo stato di ritorno. Molto utile per il debug.

Se vuoi vedere anche il stderr output puoi giocare con proc_open o semplicemente aggiungere 2>&1 al tuo $command . Quest'ultimo è spesso sufficiente per far funzionare le cose e molto più velocemente da "implementare".


Linux
  1. Come testare uno script PHP

  2. esecuzione di script php (funzione php) in linux bash

  3. Chiama lo script Python da bash con argomento

  4. Come eseguire lo script Python da Java?

  5. restituire il valore dallo script python allo script shell

Come eseguire uno script Python in PHP

Come vedere l'output di uno script PHP?

Godaddy cron job setup per l'esecuzione di script php

Esecuzione di un comando linux da python

MYSQL differisce nell'output dallo script

Esecuzione di Pycharm come root dal programma di avvio