2016-05-16 7 views
1

nicht aufrufen Ich bin seit ein paar Tagen fest. Ich versuche, ein einfaches Python-Skript aus PHP aufzurufen. Für das Leben von mir kann ich nicht herausfinden, was das Problem ist. Ich habe das Skript onoff.py mit chmod + x ausführbar gemacht. ganz gut von der Kommandozeile wie folgtKonnte ein Python-Skript über PHP

Ich kann das Skript ausführen:

[email protected]:/var/www/html $ python onoff.py 
LED on 
LED off 

Mein Problem ist, wenn ich versuche, das Skript von PHP zu nennen. Ich bekomme nichts.

Mein Python Script:

#!/usr/bin/python 
import RPi.GPIO as GPIO 
import time 
GPIO.setmode(GPIO.BCM) 
GPIO.setwarnings(False) 
GPIO.setup(18,GPIO.OUT) 
print "LED on" 
GPIO.output(18,GPIO.HIGH) 
time.sleep(1) 
print "LED off" 
GPIO.output(18,GPIO.LOW) 

Mein PHP-Skript:

<?php 
$command = escapeshellcmd('python /var/www/html/onoff.py'); 
$output = shell_exec($command); 
echo $output; 
?> 

Jede Hilfe wird sehr geschätzt!

EDIT:

, wenn ich mein onoff.py Skript eine einfache Änderung while-Schleife wie:

#!/usr/bin/python 
x=1 
while (x<10): 
    print x 
    x=x+1 

die Ausgabe am Browser:

1 2 3 4 5 6 7 8 9 

ich nur don verstehe nicht, warum die Schleife läuft, aber ich bekomme keine Ausgabe mit dem ursprünglichen Python-Code.

EDIT 2:

Ok, damit ich einen anderen Ansatz und um zu sehen, versuchen, wo der Code fehlschlägt. Ich füge Bits Code auf einmal hinzu. Bitte beachten Sie die folgenden Hinweise.

Jetzt, wenn ich die PHP ausführen zeigt es eine zufällige Zahl, so dass ich weiß, dass das Python-Skript ausgeführt wird. Wenn ich GPIO.setup (18, GPIO.OUT) entziehe und den php starte, bekomme ich einen leeren Bildschirm. Ich habe keine Ahnung, warum dies das Skript zum Scheitern bringen würde.

+1

Obligatorisch Siehe auch: [Wie kann ich Exec() Probleme debuggen?] (Http://Stackoverflow.com/q/12199353) – mario

Antwort

0

Sie müssen python vor dem Skript verwenden, d. H.:

$command = escapeshellcmd('python /var/www/html/onoff.py'); 

Wenn es Python wahrscheinlich ins't nicht funktioniert, auf die PATH des apache Benutzer und Sie können den vollständigen Pfad zum python binär verwenden müssen, verwenden which die volle zu finden Pfad:

which python 
//usr/bin/python 

Die Verwendung dieser Wert:

$command = escapeshellcmd('/usr/bin/python /var/www/html/onoff.py'); 

Hinweis:

  • Stellen Sie sicher, Apache user hat Berechtigungen zum Ausführen auf onoff.py
+0

Ich habe das auch versucht. Funktioniert immer noch nicht. – Caseyamn

+0

pi @ raspberrypi: ~ $ welche python /usr/bin/python – Caseyamn

+0

Was sind die Berechtigungen von 'onoff.py'? –

1

shell_exec() nur einen String, wenn $command zurückgeben a). Ran OK und angenommen b). dass es seine Antwort auf STDOUT spuckt.

Verwenden Sie exec() und übergeben Sie es Ihren Befehl, eine ganze Zahl $code und ein leeres Array $response die beide von PHP als Argumente durch Bezugnahme behandelt werden.

Führen Sie Ihren Befehl so:

$command = escapeshellcmd('/path/to/python /var/www/html/onoff.py'); 
$response = array(); 
$code = 0; 
exec($command, $response, $code); 
var_dump($code, $response); 
die; 

Sie sollten jetzt sehen, was ist eigentlich intern zu PHP gegeben wird und warum das Python-Skript nicht funktioniert.

+0

Ok, also habe ich die Änderungen die Ausgabe, wenn ich die PHP-Seite laden ist: int (1) Array (0) { } – Caseyamn

+0

Hmmm tut mir leid zu sagen "es funktioniert für mich" (Hinweis ich zog es direkt nach unten und entfernt escapeshellarg() als das ist; y wirklich verwendet, wenn Sie Benutzereingabe in einen CLI-Befehl munged) #> php -a $ cmd = '/ usr/bin/python /pfad/to/test.py '; $ code = 0; $ res = []; exec ($ cmd, $ res, $ code); var_dump ($ code, $ res); sterben; – theruss