2017-09-11 2 views
1

Ich erstellte zwei Skripte, wenn eines der Skripte das andere Skript ausführt und versucht, es in Echtzeit zu erhalten.Wie aus dem Stand des Kindes lesen, während es noch lebt

Das Skript, das die Ausgabe zu erhalten versucht:

import subprocess 
p = subprocess.Popen("python .\\print.py", stdout=subprocess.PIPE) 
print p.stdout.readline() 

Das zweite Skript:

import time 
print "1se12d12d32d3223" 
print "\r" 
time.sleep(10000) 

Das Problem ist, dass ich die Ausgabe nur dann, wenn der Kindprozess stirbt, obwohl die Linie bekommen wurde schon auf stdout geschrieben.

ich versuchte, die folgenden:

  • als Argument Verwendung os.pipe POPEN und dann von der "Lese" pipe Lesen
  • Shell = True als Argument Popen
  • Verwendung BufSize = 1 Popen als Argument
  • Verwendung stdout.read(), stdout.readlines(), stdout.read (1), etc ...
  • ich nicht die fcntl Modul verwenden kann, um das Rohr "nicht blockiert" zu machen, weil ich Windows
  • verwende

Alles, was ich versuche zu tun, ist die erste Zeile von stdout des Kind-Prozesses zu lesen, während der Prozess noch am Leben ist. Wie kann ich das in Python machen?

Antwort

0

Standardmäßig puffert Python seine Ausgabe. Die Ausgabe wird unter bestimmten Umständen automatisch geleert. Z.B. Wenn Sie das zweite Skript in einem Terminal ausführen, sehen Sie sofort die Ausgabe.

Sie können die Ausgabe explizit durch Einfügen einer sys.stdout.flush() vor Ihrem sleep() Aufruf leeren.

Verwandte Themen