Seite 1 von 1

time.sleep() verhindert die Ausgabe von print()

Verfasst: Dienstag 26. Juni 2012, 16:31
von edloaa
Hallo,

Ich will mit dem folgendem Code ein "Hallo Welt!" so ausgeben, dass es aussieht als würde der Text getippt werden. Hierzu erstelle ich aus dem "Hallo Welt!"-String eine Liste. Jedes Zeichen lasse ich anschließend einzelnd und ohne Zeilenumbruch ausgeben. Im ersten Beispiel scheint time.sleep(.2) jedoch die Ausgabe der einzelnen Buchstaben zu verhindern. Erst nachdem die for-Schleife vollständig durchgelaufen ist, wird das "Hallo Welt!" ausgegeben. :?

Anscheinend hat dieses Problem mit dem Parameter end='' zu tun. Ohne diesem funktioniert die Ausgabe, so wie gewünscht. Allerdings wird hier natürlich jedes mal ein Zeilenumbruch mit ausgegeben, was aber verhindert werden soll.

Code: Alles auswählen

#!/usr/bin/env python

import time

for char in list('Hallo Welt!'):
    print(char, end='') # mit end='' wird das "Hallo Welt!" erst nach dem Durchlauf der for-Schleife ausgegeben!
    time.sleep(.2)

print()

Code: Alles auswählen

#!/usr/bin/env python

import time

for char in list('Hallo Welt!'):
    print(char) # ohne end='' als Parameter werden die einzelnen Buchstaben ausgegeben!
    time.sleep(.2)

print()
Ich verwende übrigens Python 3.2.3. Für jede Hilfe oder Idee bin ich dankbar! :)

Re: time.sleep() verhindert die Ausgabe von print()

Verfasst: Dienstag 26. Juni 2012, 16:37
von EyDu
Hallo und willkommen im Forum!

Wahrscheinlich bleibt das Zeichen irgendwo im Buffer hängen, packe hinter das print in der Schleife einfach mal ein

Code: Alles auswählen

sys.stdout.flush()
Du solltest natürlich nicht vergessen auch das sys-Modul zu importieren.

Außerdem ist der Aufruf von list bei dir überflüssig.

Sebastian

Re: time.sleep() verhindert die Ausgabe von print()

Verfasst: Dienstag 26. Juni 2012, 16:45
von edloaa
Wow, eine so schnelle Antwort hatte ich nicht erwartet! :D

Ja, mit sys.stdout.flush() und ohne list() funktioniert es! Danke!