2010-02-08 14 views
13

Ich versuche, ein Python-Programm mit PHP auszuführen. Hier ist der CodePHP zum Ausführen eines Python-Skripts

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

Dies funktioniert über die Befehlszeile, aber nicht während der Ausführung durch den Browser. Ich benutze Apache, wahrscheinlich benötigt es die richtigen Privilegien? Ich bin ziemlich neu in Linux und habe keine Ahnung, wie man das funktioniert.

Jede Hilfe wäre willkommen!

Edit 1:

Versuchte proc_open zu verwenden, aber es passiert nichts. Ich gab den vollständigen Pfad zum Skript. Hat das Skript ausführbar gemacht, aber kein Glück. Irgendwelche anderen Dinge, die ich auf dem Server versuchen kann? (Es ist ein CentOS 5)

+0

Sie es so nicht tun, wenn Sie einen wirklichen Verkehr. Das Ausführen eines neuen Python-Skripts (ohne Mod-Python) wird Sie teuer zu stehen kommen. Richten Sie einen separaten, lang laufenden Python-Server (xml-rpc-Server?) Ein und rufen Sie ihn über IPC auf, wenn Sie skalieren müssen. – wisty

+0

Danke! Ich wollte das nur als Demo machen. Doch um mich zu bewegen mod_wsgi/mod_python – Abhinav

Antwort

6

Sie müssen Übergeben Sie den vollständigen Pfad an das Skript, und Sie müssen auch sicherstellen, dass das Skript für den Benutzer lesbar ist, der den Webserver ausführt (was bedeutet, dass jedes Verzeichnis im Pfad + x für den Webbenutzer sein muss).

+0

Hat beides gemacht. Funktioniert nicht.:( – Abhinav

+0

Nur um alle Grundlagen abzudecken, drucken Sie $ Ausgabe, richtig? Sie sollten auch versuchen, herauszufinden, ob Ihr Webserver chrooted läuft. – jdizzle

2

paar Checkpoints

  • script.py vollständigen Pfad übergeben werden soll, zum Beispiel /home/abhinav/script.py
  • script.py ausführbar sein sollte, chmod +x script.py
+4

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

+0

Danke, und '#!/Usr/local/bin/python' würde in der ersten Zeile von script.py benötigen – YOU

+1

Sie brauchen den Shebang nicht, wenn Sie den Interpreter verwenden, um das Skript aufzurufen (' python ') – ZeissS

6

Realisiert, was falsch war:

safe_mode aktiviert wurde
  1. Die Domain wurde eingerichtet als virtueller Host und PHP. proc_open, exec, system, passthru usw. funktionieren nicht unter safe_mode, denke ich.

  2. Versetzen Sie das Skript in das Verzeichnis, auf das der vhost zugreifen kann. Apache konnte nicht auf die Verzeichnisse außerhalb des vhost-Dokumentstamms zugreifen.

Danke für die Hilfe!

+0

können Sie erklären, wie Sie Berechtigungen in Punkt 2 setzen? – slash89mf

0

Um meinen CodeIgniter-Helfer ein Python-Skript ausführen zu lassen, musste ich #!/Usr/bin/python in die erste Zeile meines Python-Skripts setzen und KEIN Python von der exec aufrufen.

+1 für auch sieht wie folgt chmod + x

Mein Helfer tun:

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