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

Viewed 2970

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?

3 Answers

If you have been printing without a newline character at the end of your print, you can flush your latest print with:

print('\r\033[K', end='')

If you previously printed with a new line, you can use the ANSI escape code to move up one line and to the beginning of the line with:

print('\033[F', end='')

You can then flush the line as before.

An example usage:

LINE_FLUSH = '\r\033[K'
UP_FRONT_LINE = '\033[F'
...
print(UP_FRONT_LINE + LINE_FLUSH + msg)
Related