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".