2010-12-16 2 views
11

Ich war ein einfaches Programm auf Python 3.1 zu schreiben, und ich stolperte über diese:Python3 sleep() Problem

Wenn ich laufe dies auf dem IDLE es funktioniert wie beabsichtigt - druckt "Initializing." und füge dann zwei Punkte, eine nach jedem Sekunde und wartet auf Eingabe.

from time import sleep 

def initialize(): 
    print('Initializing.', end='') 
    sleep(1) 
    print(" .", end='') 
    sleep(1) 
    print(" .", end='') 
    input() 

initialize() 

Das Problem ist, dass, wenn ich die Py einen Doppelklick auf die Datei auszuführen, ist es auf python.exe läuft statt pythonw.exe, und seltsame Dinge passieren: es verbindet die alle sleep() mal also mir macht Warten Sie 2 Sekunden und drucken Sie dann die gesamte Zeichenfolge Initializing. . . auf einmal. Warum passiert das? Gibt es eine Möglichkeit, dies im Terminal zu vermeiden? Es funktioniert gut, wenn ich die IDLE in Windows und Linux verwende.

+2

ich den Grund vorstellen, schreiben Sie es Pufferung ist, weil Sie es ein '\ n 'noch nicht gegeben haben. Im Allgemeinen bedeutet die Verwendung von "Ende", dass Sie sofort etwas schreiben und etwas schreiben. –

Antwort

21

Dies liegt daran, die Ausgabe gepuffert wird.

sollten Sie einen sys.stdout.flush() hinzufügen, nachdem jeder

+0

Danke, das hat es gelöst! – roddds

+1

Und nach 4 Jahren habe ich gerade gemerkt, dass ich dies nie als eine akzeptierte Antwort gesetzt habe. – roddds

+5

Mit der Funktion 'print' von Python 3 können Sie auch den Parameter' flush' verwenden, z. 'print (". ", end = '', flush = True)' –

5

Es klingt wie der Unterschied ist, dass stdout automatisch in IDLE gespült wird. Aus Gründen der Effizienz sparen Programmiersprachen häufig eine Reihe von Druckaufrufen, bevor sie auf den Bildschirm geschrieben werden, was ein langsamer Prozess ist.

Hier ist eine andere Frage, die die Antwort, die Sie brauchen: How to flush output of Python print?