GNU/Linux >> Znalost Linux >  >> Linux

Spuštění skriptu Python z PHP

Doporučuji použít passthru a přímé zpracování výstupní vyrovnávací paměti:

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

Testováno na Ubuntu Server 10.04. Doufám, že vám to pomůže i na Arch Linuxu.

V PHP použijte funkci shell_exec:

Proveďte příkaz přes shell a vraťte celý výstup jako řetězec.

Vrátí výstup z provedeného příkazu nebo NULL, pokud dojde k chybě nebo příkaz neprodukuje žádný výstup.

<?php 

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

?>

Do souboru Python test.py , ověřte tento text na prvním řádku:(viz vysvětlení shebang):

#!/usr/bin/env python

Pokud máte nainstalovaných několik verzí Pythonu, /usr/bin/env zajistí, že použitý interpret je první na $PATH vašeho prostředí. Alternativou by bylo napevno zakódovat něco jako #!/usr/bin/python; to je v pořádku, ale méně flexibilní.

V Unixu může spustitelný soubor, který má být interpretován, indikovat, jaký interpret použít tím, že má znak #! na začátku prvního řádku, za ním následuje interpret (a případné potřebné příznaky).

Pokud mluvíte o jiných platformách, toto pravidlo samozřejmě neplatí (ale tato „řádka shebang“ neškodí a pomůže vám, pokud tento skript zkopírujete na platformu se základnou Unix, jako je Linux, Mac atd. ).

To platí, když jej spustíte v Unixu tak, že jej uděláte spustitelným (chmod +x myscript.py) a poté jej spustíte přímo:./myscript.py, spíše než jen python myscript.py

Chcete-li vytvořit spustitelný soubor na platformách typu unix:

chmod +x myscript.py

Také soubor Python musí mít správná oprávnění (spuštění pro uživatele www-data / apache, pokud PHP skript běží v prohlížeči nebo curl) a/nebo musí být "spustitelný". Také všechny příkazy do .py soubor musí mít správná oprávnění.

Převzato z php manuálu:

Jen rychlé připomenutí pro ty, kteří se snaží použít shell_exec na platformě typu aunix a nezdá se, že by to fungovalo. PHP se v systému spouští jako webový uživatel (obecně www pro Apache), takže se musíte ujistit, že webový uživatel má práva k jakýmkoli souborům nebo adresářům, které se pokoušíte použít v příkazu shell_exec. Jinak se to nebude zdát dělat cokoli.


Pokud chcete znát návratový stav příkazu a získat celý stdout výstup, který můžete ve skutečnosti použijte exec :

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

$out je pole všech řádků. $status je stav návratu. Velmi užitečné pro ladění.

Pokud chcete vidět také stderr výstup můžete buď hrát s proc_open nebo jednoduše přidat 2>&1 na váš $command . To druhé často stačí k tomu, aby věci fungovaly a mnohem rychleji je „implementovaly“.


Linux
  1. Zabránění souběžnému spuštění bash skriptu

  2. Jak stahovat soubory ze serveru SFTP pomocí skriptu python

  3. Kontrola, zda skript běží?

  1. Jak spouštět skripty Pythonu ze shellu

  2. Jak testovat PHP skript

  3. PHP skript - zjistit, zda běží pod linuxem nebo pod Windows?

  1. Spuštění PHP skriptu z příkazového řádku jako proces na pozadí

  2. Nastavení úlohy Godaddy cron pro spouštění php skriptu

  3. Spuštění linuxového příkazu z pythonu