Printing digits in one place

Steve Holden steve at holdenweb.com
Tue Nov 25 00:56:05 CET 2008


Oltmans wrote:
> I'm writing a file-transfer program and I'm receiving bytes
> transferred in a function. Now I would like to print bytes transfered
> in one place e.g.
> 
> Bytes Transfered so far X
> 
> and X will increase and cursor should stay at this position. I don't
> want to use any 3rd party module for this. Can I somehow do that
> without using any third-party module?
> 
> I've been able to do this with Console module available at
> http://effbot.org/zone/console-handbook.htm but I would want to do
> this without the Console module. Actually , I'm able to initialize the
> Console module and print the bytes transferrred information but I
> can't find a way to exit from Console module so that my other
> functions can proceed with normal display using 'print' statement.
> 
> Any ideas will be appreciated.

Try repeatedly writing something like

"\r                                  \rBytes Transferred So Far %d" \
      % count

Not the fastest approach, but probably fast enough.

If you *must* have the cursor on the number of bytes transferred
then try using backspaces after you have printed out the number. But
you'll need to track how long the number is to put out the right number
of backspaces. Something like (untested)

sys.stdout.write("Bytes Transferred So Far")
for ...
    ...
    cs = str(count)
    csl = len(cs)
    sys.stdout.write("%s%s%s%s" % (
        " "*csl, "\b"*csl, cs, "\b"*csl)

Use sys.stdout.write() for full control over spacing and newlines.

regards
 Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/




More information about the Python-list mailing list