Warum wird das Drucken in Python nicht angehalten, wenn Sleep in einer Schleife verwendet wird?

8

Dieser Code:

%Vor%

Bewirkt, dass mein Computer 5 Sekunden lang hängt und dann 0-9 ausdruckt, im Gegensatz zu dem Ausdruck einer Ziffer jede halbe Sekunde. Mache ich etwas falsch?

    
Startec 26.02.2015, 06:51
quelle

2 Antworten

14

print , druckt standardmäßig auf sys.stdout und puffert die Ausgabe gedruckt werden, intern.

  

Ob die Ausgabe gepuffert wird, wird normalerweise durch die Datei bestimmt, aber wenn das flush Schlüsselwort-Argument wahr ist, wird der Datenstrom zwangsweise geleert.

     

In Version 3.3 geändert: Das flush Schlüsselwort-Argument wurde hinzugefügt.

Zitieren sys.stdout 's Dokumentation ,

  

Wenn sie interaktiv sind, werden Standard-Streams liniengepuffert. Ansonsten werden sie wie normale Textdateien gepuffert.

Also, in Ihrem Fall müssen Sie explizit spülen, wie dies

%Vor%

Okay, es gibt viel Verwirrung um diese Pufferung. Lassen Sie mich so viel wie möglich erklären.

Erstens, wenn Sie dieses Programm in einem Terminal versuchen, führen sie Zeilenpufferung durch (was bedeutet, dass jedes Mal, wenn Sie ein Newline-Zeichen vorfinden, die gepufferten Daten an stdout senden), standardmäßig. Also, Sie können dieses Problem in Python 2.7 reproduzieren, wie dies

%Vor%

Und in Python 3.x,

%Vor%

Wir übergeben end='' , weil der Standardwert für end \n ist, wie in angegeben print 's Dokumentation ,

%Vor%

Da der Standardwert end die Zeilenpufferung unterbricht, werden die Daten sofort an stdout gesendet.

Eine andere Möglichkeit, dieses Problem zu reproduzieren, besteht darin, das eigentliche Programm von OP in einer Datei zu speichern und mit dem Python 3.x Interpreter auszuführen. Sie werden sehen, dass stdout intern die Daten zwischenspeichert und wartet, bis das Programm fertig ist .

    
thefourtheye 26.02.2015, 06:54
quelle
0

Versuchen Sie Folgendes:

%Vor%

hier '/r' ist Wagenrücklauf, es bringt den Cursor wieder an erster Stelle.

    
Ajay Tanpure 26.02.2015 09:54
quelle

Tags und Links