2016-04-22 8 views
0

Ich habe diesen Teil des folgenden Code:Keine in umgeleitet stdout

p = subprocess.Popen(['C:/Python27/python.exe', '-m', 'robot', '-d', logs_directory, input_file], stdout=subprocess.PIPE) 
for line in iter(p.stdout.readline, ''): 
    output = sys.stdout.write(line) 
    #sys.stdout.write(line) 
print "\n\n" 
print "************************************************" 
print output 
print "\n\n" 
print "************************************************" 
print "\n\n" 

Aber 'Output' Variable in der Konsole zeigt 'none'

************************************************ 
None 



************************************************ 

Was ich hier falsch mache?

+0

verwandte: [Python subprocess Kinder Ausgabe erhalten Datei und Terminal?] (Http://stackoverflow.com/q/4984428/4279) – jfs

Antwort

3

sys.stdout.write(line) gibt die Anzahl der auf stdout geschriebenen Zeichen zurück.

Sie könnten Ihre Schleife wie folgt schreiben:

output = "" 
for line in iter(p.stdout.readline, ''): 
    output += line 
    sys.stdout.write(line) 

imho Sie auch die sys.stdout.write(line) Teil entfernen können. Aber ich weiß nicht, was Sie damit tun sollen so ...

+0

Ja, Kurs. Das war lahm von mir, war es nicht :) – user2678074

+1

Sie sind willkommen :) – salomonderossi

+0

sys.stdout.write (line) gibt einen Wert zurück. Es gibt die Anzahl der auf stdout geschriebenen Zeichen zurück. – bashrc

1

Versuchen output += line statt output = sys.stdout.write(line)

0

Sie auch Funktion check_output ausprobieren können. Hier

ein Beispiel:

>>> subprocess.check_output(["echo", "Hello World!"]) 
'Hello World!\n' 

Sie können versuchen:

cmd = ['C:/Python27/python.exe', '-m', 'robot', '-d', logs_directory, input_file] 
output = subprocess.check_output(cmd) 
print output 

In den meisten Fällen kann es einfach die Arbeit machen.

Einzelheiten können Sie verweisen möchten subprocess.check_output

+0

Korrekt, aber ich möchte auch Ergebnisse zur Konsole drucken, check_output ist in diesem Fall nicht ausreichend. – user2678074

+0

Ich verstehe nicht, warum Sie denken, 'check_output' ist nicht ausreichend. Sie weisen den Rückgabewert einer Variablen zu und drucken sie dann in die Konsole. – dokelung

+0

das wird nicht "Echtzeit" drucken. Ich bekomme eine Konsolenausgabe, wenn der Subprozess beendet wird. Ich möchte Konsolen-Ausgabe haben, so kann ich Fortschritt Subprozess sehen – user2678074