ich schreibe momentan ein kleines Skript, um es nachher über eine Webseite aufzurufen.
Funktionsfähig ist es schon, und nun arbeite ich gerade an den "Feinheiten". Im Zuge dessen ist mir aufgefallen, dass sämtliche Print-Ausgaben auf einmal im Browser angezeigt werden. Ganz gleich, ob dazwischen eine Funktion aufgerufen wird, die ein wenig Zeit benötigt, wird noch bevor der return-code der Funktion angekommen ist, das dahinterliegende Print schon ausgegeben.
Beispielsweise:
Soll-Ausgabe im Browser:print "Berechnung wird gestartet"
subprocess.Popen([irgend, eine, funktion])
print "Berechnung abgeschlossen"
print "Ergebnis: -> "
Ist-Zustand im Browser:>>> Berechnung wird gestartet.
<Pause, da Funktion im Hintergrund ausgeführt wird>
>>> Berechnung abgeschlossen.
>>> Ergebnis: -> []
<Pause. Die Funktion wird bearbeitet, die Ladeanzeige dreht und dreht.>
>>> Berechnung wird gestartet.
>>> Berechnung abgeschlossen.
>>> Ergebnis: -> []
Es wird gewartet, und gerödelt, bis dann letztendlich alles auf einmal erscheint. Das eliminiert aber den Zweck dieser Ausgabe, da ich ja den Anwender vorher informieren möchte was geschieht, und nicht erst nachher. Die Abarbeitung der Funktion benötigt einige Sekunden, so dass man es auf jeden fall sehen müsste. Ich habe auch schon folgendes probiert:
in einer neuen Test-Datei:
Code: Alles auswählen
text = "lorem ipsum"
i = 0
while i < 100:
print text
i = i + 1
Ich hätte jedoch gerne die Ausgabe Zeile für Zeile, einzeln nacheinander.
Ich habe auch bereits sys.stdout.flush() nach der print-Anweisung probiert, jedoch hat das keinen merklichen Effekt bei mir gehabt. Um eventuell die Zeit ein wenig zu verlängern, habe ich auch schon versucht über time.sleep(1) ein wenig mehr Latenz reinzubekommen, leider erfolglos.
Darüber hinaus verstehe ich eine Sache noch nicht ganz. Ich habe in Version 1 meines Skripts den gesamten Inhalt direkt im Skript ausgeführt. Ich habe keine Funktionen bzw. Methoden definiert. Ich dachte dann, dass es vllt. daran liegen könnte, und habe den Code-Inhalt funktional in Methoden unterteilt. So stehen nun auch Print-Ausgaben alleine schon methodisch voneinander getrennt. Jedoch wird auch hier bis zum Ende der Skript-Abarbeitung gewartet. Selbst eine Print-Ausgabe direkt unter den "import"-Anweisungen wird zur gleichen Zeit ausgegeben, wie das letzte "print" in der zuletzt genutzten Methode. Warum ist das so?
Jemand eine Ahnung, wie ich hier vorgehen kann, um eine "dynamischere" Ausgabe umzusetzen?
Viele Grüße und danke im Voraus!
Lucky