(Ich habe einen Kommentar gepostet, aber er ist irgendwie verloren gegangen, also nochmal:)
-
Wie ich festgestellt habe, verhält sich CPython (zumindest unter Linux) unterschiedlich, je nachdem, wohin die Ausgabe geht. Wenn sie an ein tty geht, dann wird die Ausgabe nach jedem ' \n'
Wenn es an eine Pipe/Prozess geht, wird es gepuffert und Sie können die flush()
basierte Lösungen oder die -u die oben empfohlene Option.
-
Das hängt ein wenig mit der Ausgabepufferung zusammen:
Wenn Sie über die Zeilen in der Eingabe iterieren mit
for line in sys.stdin:
...
dann die für Umsetzung in CPython sammelt die Eingabe für eine Weile und führt dann den Schleifenkörper für eine Reihe von Eingabezeilen aus. Wenn Ihr Skript im Begriff ist, für jede Eingabezeile eine Ausgabe zu schreiben, könnte dies wie eine Ausgabepufferung aussehen, aber in Wirklichkeit handelt es sich um eine Stapelverarbeitung, und daher wird keine der flush()
usw. werden dabei helfen. Interessanterweise haben Sie dieses Verhalten nicht in pypy . Um dies zu vermeiden, können Sie Folgendes verwenden
while True: line=sys.stdin.readline()
...