Search code examples
pythonpython-3.xstdout

Python: How to print on same line, clearing previous text?


In Python you can print on the same line using \r to move back to the start of the line.

This works well for progress bars or increasing precentage counters, eg: Python print on same line

However when printing lines that may decrease in length, this leaves the previous lines text there, eg:

import sys
for t in ['long line', '%']:
    sys.stdout.write(t + '\r')
sys.stdout.write('\n')

Leaves the terminal text as: %ong line.

Whats the best way to write a shorter line after a longer one, when printing to the same line?


Solution

  • Along with \r, the ansi-sequence \033[K is needed - erase to end of line.

    This code works as expected.

    import sys
    for t in ['long line', '%']:
        sys.stdout.write('\033[K' + t + '\r')
    sys.stdout.write('\n')
    

    Note, this doesn't work when the string includes tabs, you may want to replace:

    sys.stdout.write('\033[K' + t + '\r') with ...

    sys.stdout.write('\033[K' + t.expandtabs(2) + '\r')