GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ausführen eines Python-Skripts von PHP

Ich empfehle die Verwendung von passthru und den Ausgabepuffer direkt handhaben:

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

Getestet auf Ubuntu Server 10.04. Ich hoffe, es hilft Ihnen auch unter Arch Linux.

Verwenden Sie in PHP die Shell_exec-Funktion:

Befehl per Shell ausführen und die komplette Ausgabe als String zurückgeben.

Es gibt die Ausgabe des ausgeführten Befehls oder NULL zurück, wenn ein Fehler aufgetreten ist oder der Befehl keine Ausgabe erzeugt.

<?php 

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

?>

In die Python-Datei test.py , überprüfen Sie diesen Text in der ersten Zeile:(siehe Shebang-Erklärung):

#!/usr/bin/env python

Wenn Sie mehrere Versionen von Python installiert haben, stellt /usr/bin/env sicher, dass der verwendete Interpreter der erste im $PATH Ihrer Umgebung ist. Die Alternative wäre, etwas wie #!/usr/bin/python; das ist ok, aber weniger flexibel.

In Unix kann eine ausführbare Datei, die interpretiert werden soll, angeben, welcher Interpreter verwendet werden soll, indem ein #! am Anfang der ersten Zeile, gefolgt vom Interpreter (und allen eventuell benötigten Flags).

Wenn Sie über andere Plattformen sprechen, gilt diese Regel natürlich nicht (aber diese "Shebang-Linie" schadet nicht und hilft, wenn Sie dieses Skript jemals auf eine Plattform mit einer Unix-Basis wie Linux, Mac usw. kopieren ).

Dies gilt, wenn Sie es unter Unix ausführen, indem Sie es ausführbar machen (chmod +x myscript.py) und es dann direkt ausführen:./myscript.py, anstatt nur python myscript.py

Um eine Datei auf Unix-Plattformen ausführbar zu machen:

chmod +x myscript.py

Außerdem muss die Python-Datei über die richtigen Berechtigungen verfügen (Ausführung für Benutzer www-data / apache, wenn das PHP-Skript im Browser oder Curl ausgeführt wird) und / oder "ausführbar" sein. Auch alle Befehle in .py Datei muss über die richtigen Berechtigungen verfügen.

Entnommen aus dem PHP-Handbuch:

Nur eine kurze Erinnerung für diejenigen, die versuchen, shell_exec auf einer Unix-Plattform zu verwenden, und es anscheinend nicht zum Laufen bringen. PHP wird als Webbenutzer auf dem System ausgeführt (im Allgemeinen www für Apache), daher müssen Sie sicherstellen, dass der Webbenutzer Rechte für alle Dateien oder Verzeichnisse hat, die Sie im Shell_exec-Befehl verwenden möchten. Andernfalls scheint es nicht so zu sein etwas tun.


Wenn Sie den Rückgabestatus des Befehls wissen und den gesamten stdout erhalten möchten Ausgabe, die Sie können tatsächlich exec verwenden :

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

$out ist ein Array aller Zeilen. $status ist der Rückgabestatus. Sehr nützlich zum Debuggen.

Wenn Sie auch die stderr sehen möchten Ausgabe können Sie entweder mit proc_open spielen oder einfach 2>&1 hinzufügen zu Ihrem $command . Letzteres reicht oft aus, um Dinge zum Laufen zu bringen und viel schneller zu "implementieren".


Linux
  1. So testen Sie ein PHP-Skript

  2. Ausführen des PHP-Skripts (PHP-Funktion) in Linux Bash

  3. Godaddy Cron-Job-Setup zum Ausführen von PHP-Skripten

  4. MYSQL unterscheidet sich in der Ausgabe vom Skript

  5. Wie führe ich ein Python-Skript von Java aus aus?

So führen Sie ein Python-Skript in PHP aus

So laden Sie Dateien vom SFTP-Server mit Python-Skript herunter

Wie kann man die Ausgabe eines Php-Skripts sehen?

Rufen Sie das Python-Skript von bash mit Argument auf

Rückgabewert vom Python-Skript zum Shell-Skript

Python erstellen (aus dem Quellcode installieren), ohne Tests auszuführen