2016-06-10 10 views
0

schrieb ich ein Drehbuch und wenn ich es in der Shell ausgeführt, druckt er die Werte, Ausgabe korrekt (sudo python /home/pi/map/apps/assistant/IFTTT.py):Ausführung Python-Skript keine Ausgabe

def GetCalenderMessages(): 
    print("test") 
    CalenderMessage = bus_service.receive_queue_message('calendar', peek_lock=True) 
    if CalenderMessage != None: 
     message = str(CalenderMessage.body) 
     queuemessage = message.split('|')[1] 
     print(queuemessage) 

     sys.stdout.write(queuemessage) 
     saytts(queuemessage) 
     CalenderMessage.delete() 

Ich habe eine Schnittstelle mit einem On-Schalter und wenn ich auf On drücken, sollte dieses Skript ausgeführt werden, was funktioniert, aber ich bekomme nicht die Druckausgabe definiert ich das Skript oben.

@app_bp.route("/on", methods=["POST"]) 
@opsoroapp.app_api 
def on(): 
    print('test') 
    cmd = "sudo python /home/pi/OnoSW/apps/assistant/IFTTT.py" 
    p = subprocess.Popen(cmd, shell=True, stdout=PIPE, stderr=STDOUT) 
    for line in iter(p.stdout.readline,''): 
     print line 

Ich habe versucht, verschiedene Dinge mit subprocess, wie subprocess.check_output usw., aber es die gedruckten Werte nicht zurück geben.

Danke

+0

Warum Sie dies über Popen tun? Warum kann man nicht einfach das Skript importieren und die Funktion aufrufen? –

+0

Ihre Funktion sollte stattdessen einen Wert zurückgeben mit 'print()', 'sys.stdout.write()', etc und wie @DanielRoseman sagte: Importieren Sie das Modul und rufen Sie die Funktion, anstatt es als separaten Prozess. 1- siehst du das Ergebnis von 'print ('test')'? 2- Sehen Sie das Ergebnis von 'print >> sys.stderr," stderr "'? 3- Müssen Sie ein Passwort angeben, um 'sudo python' auszuführen? Warum brauchst du 'sudo' hier? – jfs

Antwort

0

1) Anstelle der Verwendung von Rohren und Popen, nur das Skript importieren und rufen GetCalenderMessages

2) Haben Sie es an die Konsole gerade gedruckt werden soll oder an den Webapp Benutzer ausgegeben?

Falls das zweite Szenario ist der Fall:

in Ihrer route Funktion, Sie scheinen nicht zu return nichts. Denken Sie daran, wie Flaschrouten funktionieren, was Sie (beim Erfolg) an den Benutzer (in Form einer Webseite) zurückgeben. Sie müssen also Ihr Ergebnis speichern und es dann als Zeichenfolge zurückgeben ODER es zu einer HTML-Vorlage hinzufügen und render diese Vorlage stattdessen.

See more

falls Sie es wünschen zu trösten gedruckt, versuchen 1) könnte Ihr Problem beheben

+0

Option 1 ist keine Option. In Option 2 gab ich diesmal die Ausgabe zurück, aber es tut nichts. Ich werde mein Problem zeigen: wenn ich in der Shell diesen Befehl 'Sudo Python IFTTT.py krank bekomme: http://i.imgur.com/iqiNZRT.png, wenn ich es in der Flasche Webserver ill get: http : //i.imgur.com/HZzyXpI.png, schauen Sie sich den ersten Fehler nicht an, weil ich Python 2.7 verwende. – Mat

+0

Warum verwenden Sie Sudo - es ist sehr selten, dass jede Anwendung root priveleges benötigt. –

+1

Wenn Sie ein 'Sudo' im Terminal ausführen, wird Unix/Linux nach einem Passwort fragen. Wenn Sie über pOpen ein 'sudo' ausführen, erwartet es immer noch ein Passwort - und wird nicht ausgeführt, bis Sie das Passwort eingegeben haben. Die Fragen, die gestellt wurden, sind gültig - warum benutzen Sie 'sudo' und warum erstellen Sie einen separaten Prozess? Sie behaupten, Sie müssten - aber wenn wir nicht verstehen, warum es schwer wird, Ihnen zu helfen. –