[Tutor] Writing to the terminal?

Roel Schroeven rschroev_nospam_ml at fastmail.fm
Mon Dec 13 19:11:40 CET 2010


Op 2010-12-12 22:33, Steven D'Aprano schreef:
> Terry Carroll wrote:
> 
>> import time
>> for t in range(10,0, -1):
>>     print "%s \x0D" %t,
>>     time.sleep(1)
>> print # get to next line
>> print "Done!"
> 
> Which operating system and terminal did you use?
> 
> In my experience, using print is not satisfactory, because the print 
> command buffers the output and doesn't actually print anything until 
> either a newline or you have a certain number of characters. So the 
> above will queue up the following string:
> 
> "10 \r9 \r8 \r7 \r6 \r5 \r4 \r3 \r2 \r1 \r\n"
> 
> before anything becomes visible, and of course that just looks like "1".

Instead of print, use sys.stdout.write():

import sys
import time
for t in range(10, 0, -1):
  sys.stdout.write('\r%s ' % t)
  time.sleep(1)
sys.stdout.write('\n')
sys.stdout.write('Done!')

-- 
The saddest aspect of life right now is that science gathers knowledge
faster than society gathers wisdom.
  -- Isaac Asimov

Roel Schroeven



More information about the Tutor mailing list