12 Stimmen

Python3 sleep()-Problem

Ich war ein einfaches Programm auf Python 3.1 zu schreiben und ich stolperte über diese:

Wenn ich dies auf dem IDLE ausführe, funktioniert es wie beabsichtigt - druckt "Initializing." und fügt dann zwei Punkte ein, einen nach jeder Sekunde, und wartet auf eine 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 auf die .py-Datei doppelklicke, um sie auszuführen, sie mit python.exe statt mit pythonw.exe ausgeführt wird und seltsame Dinge passieren: Sie verbindet alle sleep() mal, d.h. ich muss 2 Sekunden warten, und dann wird die ganze Zeichenkette gedruckt Initializing. . . sofort. Wie kommt es dazu? Gibt es eine Möglichkeit, dies im Terminal zu vermeiden? Es funktioniert gut, wenn ich IDLE sowohl unter Windows als auch unter Linux verwende.

24voto

John La Rooy Punkte 278961

Das liegt daran, dass die Ausgabe gepuffert wird.

Sie sollten eine sys.stdout.flush() nach jedem Schreiben

5voto

leoger Punkte 1054

Der Unterschied scheint darin zu bestehen, dass stdout in IDLE automatisch gespült wird. Aus Gründen der Effizienz speichern Programmiersprachen oft eine Reihe von Druckaufrufen, bevor sie auf den Bildschirm schreiben, was ein langsamer Prozess ist.

Hier ist eine weitere Frage, auf die Sie eine Antwort brauchen: Wie zu spülen Ausgabe von Python drucken?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X