13 Stimmen

PHP dazu bringen, ein Python-Skript auszuführen

Ich versuche, ein Python-Programm mit PHP auszuführen. Hier ist der Code

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

Dies funktioniert über die Befehlszeile, aber nicht bei der Ausführung über den Browser. Ich verwende Apache, also braucht es wahrscheinlich die richtigen Privilegien? Ich bin ziemlich neu in Linux und habe keine Ahnung, wie ich das zum Laufen bekomme.

Für jede Hilfe wären wir dankbar!

Bearbeiten 1:

Versucht zu verwenden proc_open aber nichts passiert. Ich habe den vollständigen Pfad zum Skript angegeben. Ich habe das Skript ausführbar gemacht, aber kein Glück. Gibt es noch andere Möglichkeiten, die ich auf dem Server ausprobieren kann? (Es ist ein CentOS 5)

0 Stimmen

Machen Sie es nicht so, wenn Sie einen echten Verkehr haben. Die Ausführung eines neuen Python-Skripts (ohne mod-python) wird Sie teuer zu stehen kommen. Richten Sie einen separaten, langlaufenden Python-Server (xml-rpc-Server?) ein und rufen Sie ihn über IPC auf, wenn Sie skalieren müssen.

0 Stimmen

Danke! Ich wollte das nur als Demo machen. Noch zu bekommen meinen Weg um mod_wsgi/mod_python

6voto

jdizzle Punkte 3753

Sie müssen den vollständigen Pfad zum Skript übergeben und außerdem sicherstellen, dass das Skript für den Benutzer, der den Webserver betreibt, lesbar ist (d. h. jedes Verzeichnis im Pfad muss für den Webbenutzer +x sein).

0 Stimmen

Nur um sicherzugehen, dass Sie $output tatsächlich ausdrucken, richtig? Sie sollten auch versuchen herauszufinden, ob Ihr Webserver chroot läuft.

6voto

Abhinav Punkte 36146

Ich habe erkannt, was falsch war:

  1. Die Domain wurde als virtueller Host eingerichtet und der safe_mode von PHP war aktiviert. proc_open, exec, system, passthru etc. funktionieren im safe_mode nicht, denke ich.

  2. Legen Sie das Skript in das Verzeichnis, auf das der vhost Zugriff hat. Apache war nicht in der Lage, auf die Verzeichnisse außerhalb des vhost-Dokumentenstamms zuzugreifen.

Vielen Dank für die Hilfe!

2voto

YOU Punkte 113320

Wenige Kontrollpunkte

  • script.py sollte den vollständigen Pfad übergeben, z. B, /home/abhinav/script.py
  • script.py sollte ausführbar sein, chmod +x script.py

4 Stimmen

"script.py sollte ausführbar sein" nicht, wenn der Interpreter aufgerufen wird.

1 Stimmen

Danke, und #!/usr/local/bin/python würde in der ersten Zeile von script.py benötigt

1 Stimmen

Sie brauchen den Shebang nicht, wenn Sie den Interpreter zum Aufruf des Skripts verwenden ( python <filename> )

0voto

Ryan Buckley Punkte 115

Damit mein CodeIgniter-Helfer ein Python-Skript ausführt, musste ich #!/usr/bin/python in die erste Zeile meines Python-Skripts einfügen und Python NICHT über exec aufrufen.

+1 auch für chmod +x

Mein Helfer sieht so aus:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X