Printing to console, no scroll

mensanator mensanator at aol.com
Thu Jan 15 03:09:05 CET 2004


Harry George <harry.g.george at boeing.com> wrote in message news:<xqxr7y2sq9l.fsf at cola2.ca.boeing.com>...
> "Totte Karlsson" <mtk at qm.com> writes:
> 
> > Hi,
> > How can I print to the console without having it scrolling to a new line for
> > each print statement?
> > I want to print a count down in the console, but for each count it scrolls
> > the screen (of course).
> > 
> >  Is there another way?
> > 
> > Here is the simple script for now
> > 
> > print "Closing window in :"
> > for second in range(10):
> >     time.sleep(1)
> >     print `10-second` +" seconds"
> > 
> > thanks
> > /totte
> > 
> > 
> > 
> > 
> 
> You need to flush after the print statements.  If you have several
> prints (not just 1 as in this example), it is easier to hide in a
> separate function.
> 
> def msg(txt):
>     sys.stdout.write(txt)
>     sys.stdout.flush()
> 
> > for second in range(10):
> >     time.sleep(1)
> >     msg(`10-second` +" seconds ")  #add a space at the end to delimit
> > print    #to finish off the line

That produces

10 seconds 9 seconds 8 seconds 7 seconds 6 seconds 5 seconds 4 seconds 
3 seconds 2 seconds 1 seconds 



This will produce a true countdown - the messages overwite each other:

for sec in range(10):
	time.sleep(1)
	m = "%2d seconds" % (10-sec)
	msg(m + chr(13))

But this will only work on systems that properly handle control 
characters. It works from a Windows command prompt but doesn't from
Idle which shows that silly undefined character box (which I'll 
show here as []). So the Idle output looks like

10 seconds[] 9 seconds[] 8 seconds[] 7 seconds[] 6 seconds[] 
5 seconds[] 4 seconds[] 3 seconds[] 2 seconds[] 1 seconds[] 

which, when copied and pasted into Google, results in

10 seconds
 9 seconds
 8 seconds
 7 seconds
 6 seconds
 5 seconds
 4 seconds
 3 seconds
 2 seconds
 1 seconds

This is the reason why the PROPER way to end a new line is
with a carriage_return + line_feed and not simply line_feed.
It also worked properly from the shell in Cygwin, but I
don't have a real unix or linux system to try it on.



More information about the Python-list mailing list