Ich verwende jetzt Popen, funktioniert ganz gut, wohl nicht das performanteste, aber naja...
Code: Alles auswählen
p = subprocess.Popen("program -p1 -p2".split(), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
with open("program.log", "w") as f:
while True:
next_line = p.stdout.readline()
if next_line == "" and p.poll() != None:
break
sys.stdout.write(next_line)
sys.stdout.flush()
f.write(next_line)
f.flush()
next_line = p.stderr.readline()
if next_line == "" and p.poll() != None:
break
sys.stderr.write(next_line)
sys.stderr.flush()
f.write(next_line)
f.flush()
Funktioniert wohl nicht in Python3, aber wir setzen sowieso noch Python27 ein. Bei Python3 bekomme ich irgeneinen Bytearray zurück...
Man kann das Codebeispiel bestimmt besser machen, aber ich habe nun wenigstens den Effekt, den ich gesucht habe. Rein vom "zugucken" sieht es gar nicht so langsam aus