Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unprint a line on the console in Python?

Is it possible to manipulate lines of text that have already been printed to the console?

For example,

import time
for k in range(1,100):
     print(str(k)+"/"+"100")
     time.sleep(0.03)
     #>> Clear the most recent line printed to the console
print("ready or not here I come!")

I've seen some things for using custom DOS consoles under Windows, but I would really like something that works on the command_line like does print without any additional canvases.

Does this exist? If it doesn’t, why not?

P.S.: I was trying to use curses, and it was causing problems with my command line behaviour outside of Python. (After erroring out of a Python script with curses in it, my Bash shell stopped printing newline -unacceptable- ).

like image 336
kpie Avatar asked May 12 '15 23:05

kpie


People also ask

How do you overwrite a line in Python terminal?

Summary: The most straightforward way to overwrite the previous print to stdout is to set the carriage return ( '\r' ) character within the print statement as print(string, end = "\r") . This returns the next stdout line to the beginning of the line without proceeding to the next line.

How do you return a line in Python?

In Python strings, the backslash "\" is a special character, also called the "escape" character. It is used in representing certain whitespace characters: "\t" is a tab, "\n" is a newline, and "\r" is a carriage return.


1 Answers

What you're looking for is:

print("{}/100".format(k), "\r", end="")

\r is carriage return, which returns the cursor to the beginning of the line. In effect, whatever is printed will overwrite the previous printed text. end="" is to prevent \n after printing (to stay on the same line).

A simpler form as suggested by sonrad10 in the comments:

print("{}/100".format(k), end="\r")

Here, we're simply replacing the end character with \r instead of \n.

In Python 2, the same can be achieved with:

print "{}/100".format(k), "\r",
like image 145
sirfz Avatar answered Sep 18 '22 01:09

sirfz