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?
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')