Problem mit time.sleep()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Darkelf
User
Beiträge: 7
Registriert: Mittwoch 5. März 2008, 19:04

Montag 16. Juni 2008, 11:10

Hallo zusammen,

ich habe ein kleines Problem mit time.sleep(). Zumindest ist das mein derzeit vermuteter Fehlerkandidat. Es geht um folgendes:
Ich habe eine sehr einfache Schleife, die jede Sekunde eine Zahl ausgeben soll (von 1 bis 10). Dabei soll die Ausgabe horizontal erfolgen, also in einer Zeile. Leider ist es nun aber so, dass Python die auszugebenden Zahlen quasi "sammelt" und nach 10 Sekunden alles auf einmal ausgibt. Ich verstehe nicht, warum das so ist. Hier mal der Code:

Code: Alles auswählen

#!/usr/bin/env python 
# -*- coding: utf-8 -*-

import time

for i in xrange(1,11):
    print i,
    time.sleep(1)

print "\nFertig!"
Kann mir bitte jemand erklären, warum sich Python hier so sonderbar verhält oder wo mein Denkfehler liegt?
Wenn ich "time.sleep(1)" vor die print-Anweisung schreibe ändert sich nichts am Verhalten und auch wenn ich die print-Anweisung in eine Funktion auslagere und diese in der Schleife aufrufe, scheint Python zu sammeln. Evtl. dachte ich mir, könnte es auch am Komma hinter print liegen, aber ich weiß keinen andere Möglichkeit, wie ich sonst in einer Zeile bleiben könnte.

Vielen Dank für eure Hilfe.

Gruß
darkelf
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Montag 16. Juni 2008, 11:16

Das liegt daran, dass die Ausgabe gepuffert wird, bevor sie im Konsolenfenster ausgegeben wird (normalerweise bis zum naechsten Zeilenumbruch oder bis zu einer bestimmten Datenmenge). Bau mal ein sys.stdout.flush() nach jedem print ein.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Darkelf
User
Beiträge: 7
Registriert: Mittwoch 5. März 2008, 19:04

Montag 16. Juni 2008, 11:22

Hi Rebecca,

Vielen Dank, das funktioniert einwandfrei mit sys.stdout.flush().
Das die Ausgabe gepuffert wird, wusste ich nicht.
Vielen Dank für die Info -> wieder ein bißchen schlauer geworden :D .

Schönen Tag noch.

Gruß
darkelf
Antworten