2016-08-17 1 views
-1

Ich versuche Code von this Antwort ausführen. Der Einfachheit halber ist der Code unten aufgeführt.Warum funktioniert dieser Code für jemand anderen, aber nicht für mich?

main.py

from subprocess import Popen, PIPE 

p = Popen(['py', 'client.py'], stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True) 
r = True 
while r: 
    r = p.stdout.readline() 
    print r 

client.py

def fn(): 
    for a in (0, 1, 2): 
     print a 
fn() 

OUTP:

b'0\r\n' 
b'1\r\n' 
b'2\r\n' 
b'' 

Die Person, die die Antwort beigetragen sagte, es für sie arbeitet. Ich kann jedoch keine Ausgabe erzeugen. Ich habe dies mit Python 2.7 auf Mac, Linux und Windows versucht.

Wenn dies für Sie funktioniert, erläutern Sie bitte, warum es nicht für mich funktioniert. Alles, was ich mache, ist python main.py in dem Verzeichnis, wo beide Dateien sind.

EDIT: "OUT:" ist, was ich bekommen soll. Ich bekomme jedoch nichts.

+0

Dieser Code entspricht nicht die erwartete Ausgabe. Wenn Sie sich den Bearbeitungsverlauf der Antwort ansehen, von der Sie die Antwort erhalten haben, scheint der Code wiederholt geändert worden zu sein, ohne ihn jedes Mal getestet zu haben. – user2357112

+0

Ich erhalte keine Ausgabe, wenn ich den Code ausführe. Oben ist die neueste Version der "bereitgestellten Lösung". Der OUT: ist was er bekommt/was ich bekommen soll. – BadProgrammer

+0

Am Ende, print r.returncode - Wurde der Subprozess erfolgreich abgeschlossen? – James

Antwort

0

Was passiert, wenn Sie dies tun?

main.py

from subprocess import check_output 

client_output = check_output(['python', 'client.py']) 
print client_output 

https://docs.python.org/2/library/subprocess.html

Sie sollten die Popen.communicate() Methode suchen.

Vielleicht so etwas wie:

main.py

from subprocess import Popen, PIPE 

p = Popen(['python', 'client.py'], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
print p.communicate()[0] 
+0

Das produziert 0 1 2 und funktioniert für mich. Warum ist das der Fall? – BadProgrammer

+2

Ich weiß, dass Sie keine Code-Blöcke in Kommentare einfügen können. Nichtsdestotrotz sollte dies ein Kommentar und keine Antwort sein. –

+0

@BadProgrammer: könnte wegen 'Python' anstelle von' py' sein. Haben Sie einen Programm-, Alias- oder symbolischen Link namens 'py'? – cdarke

Verwandte Themen