Ich bin was Python angeht ein Einsteiger und werde aus sys.stdout.flush() nicht schlau.
Ich habe ein Python Script das mehrere andere Python Scripts aufrufen soll.
Die einzelnen Scripts machen dann etwas und geben einen Status aus, ähnlich dem Linux Startvorgang.
Beispielausgabe:
Code: Alles auswählen
Startup !
Starte Script /scripts/test1.py ...
Startup Taskscript 1!
Lasse Aktion 1 laufen... OK
Lasse Aktion 2 laufen... OK
Lasse Aktion 3 laufen... OK
Taskscript 1 End!
Starte Script /scripts/test2.py ...
Startup Taskscript 2!
Lasse Aktion 1 laufen... OK
Lasse Aktion 2 laufen... OK
Lasse Aktion 3 laufen... OK
Lasse Aktion 4 laufen... OK
Lasse Aktion 5 laufen... OK
Taskscript 2 End!
End!
Soweit ist das nicht weiter schwer und das krieg ich auch hin.
Mein Problem ist folgendes:
Zwischen der Ausgabe von "Lasse Aktion X laufen..." und dem OK vergeht ja einige Zeit in der der eigentliche Prozess im Sub-Script läuft.
Erst dann kommt die Ausgabe von OK und der Zeilenumbruch.
readline() liest aber ja nur wenn ein Zeilenumbruch da ist.
Wie bilde ich das jetzt ab, wenn ich keinen Zeilenumbruch habe?
Hier sind meine Test-Scripte:
test.py:
Code: Alles auswählen
#!/usr/bin/env python
import os, time, sys, subprocess
print "Startup !"
scripts = ["test1.py", "test2.py"]#
path = "//scripts"
for script in scripts:
script = path + "/" + script
print " Starte Script " + script + " ..."
sp = subprocess.Popen(script, cwd=os.path.dirname(script), stdout=subprocess.PIPE, universal_newlines=True, stderr=subprocess.STDOUT,stdin=None)
for line in iter(sp.stdout.readline, ""):
line = line.rstrip("\n")
print " " + line
sys.stdout.flush()
print "End!"
Code: Alles auswählen
#!/usr/bin/env python
import time, sys
print "Startup Taskscript 1!"
for l1 in range (1,4):
print " Lasse Aktion %s laufen..." % l1,
sys.stdout.flush()
time.sleep(1)
print "OK"
print "Taskscript 1 End!"
Code: Alles auswählen
#!/usr/bin/env python
import time, sys
print "Startup Taskscript 2!"
for l1 in range (1,6):
print " Lasse Aktion %s laufen..." % l1,
sys.stdout.flush()
time.sleep(1)
print "OK"
print "Taskscript 2 End!"