Skip to content

How to output above the last printed line?

Is there a way in python to print something in the command line above the last line printed? Or, similarly to what I want to achieve, remain the last line intact, that is, not overwrite it.

The goal of this is to let the last line in the command line a status/precentage bar.

Output example:

File 1 processed
(0.1% Completed)

Next refresh:

File 1 processed
File 2 processed
(0.2% Completed)

Next refresh:

File 1 processed
File 2 processed
File 3 processed
(0.3% Completed)

Answer

from time import sleep
erase = 'x1b[1Ax1b[2K'

def download(number):
    print(erase + "File {} processed".format(number))

def completed(percent):
    print("({:1.1}% Completed)".format(percent))

for i in range(1,4):
    download(i)
    completed(i/10)
    sleep(1)

Works in my python 3.4, final output is:

File 1 processed
File 2 processed
File 3 processed
(0.3% Completed)

If you want read more about terminal escape codes see: Wikipedia’s ANSI escape codes article.

As requested, example with a space:

from time import sleep
erase = 'x1b[1Ax1b[2K'

def download(number):
    print(erase*2 + "File {} processed".format(number))

def completed(percent):
    print("n({:1.1}% Completed)".format(percent))

print("n(0.0% Completed)")
for i in range(1,5):
    download(i)
    completed(i/10)
    sleep(1)

The final output is:

File 1 processed
File 2 processed
File 3 processed
File 4 processed

(0.4% Completed)