2010-12-16 19 views
11

Python 3.1 üzerinde basit bir program yazıyordum ve ben bu tökezledi:Python3 uyku() sorun

Ben gerektiği gibi çalışıyorsa IDLE bu çalıştırırsanız - "Initializing." baskılar ve daha sonra iki nokta, her ardına ekler ikinci ve giriş için bekler.

from time import sleep 

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

initialize() 

Sorun dosyayı yürütmek için .py çift tıklayın, bunun önce pythonw.exe ait python.exe üzerinde çalışan olması ve garip şeyler: o yani beni yapar tüm sleep() kez katıldı 2 saniye bekleyin ve daha sonra tüm dize Initializing. . . bir kerede yazdırır. Bu neden oluyor? Terminalde bunun olmasını önlemek için bir yolu var mı? IDLE'yi hem windows hem de linux'da kullanırsam iyi çalışır.

+2

edilir yazma sonra sys.stdout.flush() eklemek gerekir. Genel olarak, 'son' kullanımı, devam edip hemen bir şeyler yazdığınızı gösterir. –

cevap

21

çıkış tamponlu ediliyor olmasıdır.

Sen henüz bunu bir `\ n 'vermediğiniz için her Bunun tamponlama var sebebini hayal

+0

Teşekkürler, bu çözüldü! – roddds

+1

Ve 4 yıl sonra fark ettim ki, bunu asla kabul edilen bir cevap olarak seçmedim. – roddds

+5

Python 3'ün 'print' işlevini kullanarak,' flush' parametresini de kullanabilirsiniz, örn. print (".", end = '', floş = True) ' –

5

Bu fark, stdout'un otomatik olarak IDLE'de temizlendiğinden kaynaklanıyor. Verimlilik için, programlama dilleri, ekrana yazmadan önce bir grup yazdırma çağrısının kaydedilmesini yavaş bir süreçtir.

İşte ihtiyacınız cevabı vardır başka soru: How to flush output of Python print?