On Nov 23, 8:54 pm, Dave Angel <da...@ieee.org> wrote: > Jankins wrote: > > On Nov 23, 4:08 pm, "Diez B. Roggisch" <de...@nospam.web.de> wrote: > > >> Jankins schrieb: > > >>> I am trying to use sys.stdout to print out "process-bar" like: > >>> -->1% > > >>> Here is my program ‘test.py’: > > >>> from sys import stdout > >>> for v in range(10): > >>> stdout.write('-->%d' % v) > >>> stdout.flush() > >>> else: > >>> stdout.write('done!') > >>> #end for > > >>> Then, I use 'python -u test.py' to run this script. But what I get > >>> is : > >>> -->0-->1-->2-->3-->4-->5-->6-->7-->8-->9done! > > >>> I am suppose to get 'done!'. > > >>> Can anybody help me about this? > > >> You misunderstand what "flush" means. It is not about clearing the > >> screen, or the line. > > >> Try printing > > >> stdout.write('\r-->%d') > > >> Diez > > > But there is still a problem. When you use control character '\r', you > > actually move to the head of the current buffer line and overwrite it. > > So if I use this way: > > for i in range(100, 0,-1) > > > The tail of the buffer is not overwrote. > > > How to solve this problem? > > > Thanks. > > No idea what you mean by "buffer line." This is moving the cursor > around on the console. > > Anyway, for such a loop, just make sure all the strings are the same > length. Or just cheat and always write a few blanks at the end. > > sys.stdout.write("\r -- %5d" % i) > > should do it, for up to 5 digit values > > DaveA
'%5d' is elegant. I prefer adding some space at the end of the output string. Thanks. -- http://mail.python.org/mailman/listinfo/python-list