2010-05-11 12 views
5

İstediğim şey, time.sleep() işlevini kullanarak bir saniyede yazdırılan bir noktaya 5 nokta yazdırmaktır, ancak sonuç 5 nokta idi 5 saniye sonra bir defa basıldığında gecikme.
Hem yazdırma hem de sys.stdout.write, aynı sonucu denedi.sys.stdout.write() ile sys.stdout.write() işlevi bir işlevde time.sleep() ile

Her türlü öneri için teşekkürler.

import time 
import sys 

def wait_for(n): 
    """Wait for {n} seconds. {n} should be an integer greater than 0.""" 
    if not isinstance(n, int): 
     print 'n in wait_for(n) should be an integer.' 
     return 
    elif n < 1: 
     print 'n in wait_for(n) should be greater than 0.' 
     return 
    for i in range(0, n): 
     sys.stdout.write('.') 
     time.sleep(1) 
    sys.stdout.write('\n') 

def main(): 
    wait_for(5) # FIXME: doesn't work as expected 

if __name__ == '__main__': 
    try: 
     main() 
    except KeyboardInterrupt: 
     print '\nAborted.' 

cevap

8

Yazdıktan sonra yıkamanız gerekir.

sys.stdout.write('foo') 
sys.stdout.flush() 
wastetime() 
sys.stdout.write('bar') 
sys.stdout.flush() 
+0

Wow, hızlı yanıt için teşekkürler! :-) – philipjkim

4

Sen ilerleme çubukları için sys.stderr.write kullanmalıdır; stderr, arabelleğe alınmamanın (rastgele değil) avantajına sahiptir, dolayısıyla sys.stderr.flush numaralı çağrıya ihtiyaç yoktur. Ayrıca, this numaralı cevaba da bakınız.

+0

Bilgi için teşekkürler! – philipjkim