2015-05-02 4 views
21

Ich lese Quellcode für god Eine Prozessüberwachung Framework in Ruby und fand diese STDOUT.sync = true. So etwas habe ich noch nie gesehen. Bitte erläutern, was es macht, was der Punkt dieser Linie?Was STDOUT.sync = wahr bedeutet?

Vielen Dank im Voraus.

Antwort

25

Normalerweise puts schreibt nicht sofort zu STDOUT, aber puffert die Zeichenfolgen intern und schreibt die Ausgabe in größeren Blöcken. Dies geschieht, weil IO-Vorgänge langsam sind und es normalerweise sinnvoller ist, nicht jedes einzelne Zeichen sofort in die Konsole zu schreiben.

Dieses Verhalten führt in bestimmten Situationen zu Problemen. Stellen Sie sich vor, Sie möchten einen Fortschrittsbalken erstellen (führen Sie eine Schleife aus, die einzelne Punkte zwischen umfangreichen Berechnungen ausgibt). Bei der Pufferung kann das Ergebnis sein, dass für eine Weile keine Ausgabe erfolgt und plötzlich mehrere Punkte gleichzeitig ausgedruckt werden.

Um dieses Verhalten zu vermeiden und stattdessen sofort zu STDOUT schreiben Sie STDOUT in Sync-Modus wie folgt einstellen:

STDOUT.sync = true 

Vom docs:

Wenn Sync-Modus wahr ist, alle Ausgaben ist wird sofort zum zugrunde liegenden Betriebssystem geleert und intern nicht gepuffert.

+0

Ihr Beispiel mit Punkten erinnerte mich an Fortschrittsbalken. – SuperManEver