Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python - how do I display an updating value on one line and not scroll down the screen

I have a python script which receives values in real-time. My script prints the values as they are received and currently, each update is printed to the screen and the output scrolls down e.g.

Update 1
Update 2
Update 3
...

Is it possible to have each new value overwrite the previous value on the output screen so that the values don't scroll? e.g.

Update 1

When Update 2 is received the print statement would update the output screen to:

Update 2

and so on...

Thanks in advance for any pointers.

like image 999
Mark Smith Avatar asked Jan 11 '17 14:01

Mark Smith


People also ask

How do you print dynamic data in Python?

To print everything in one line dynamically with Python, we can set the end parameter to an empty string and the sep parameter to a string with one space. And we set flush to True . We loop through the iterator that returns 1 to 9. Then we call print in the loop body with the options set.

How do you print on different lines in Python?

"\n" can be used for a new line character, or if you are printing the same thing multiple times then a for loop should be used.


2 Answers

You can pass end='\r' to the print() function. '\r' represents a carriage return in Python. In Python 3 for example:

import time
for i in range(10):
    print('Update %d' % i, end='\r')
    time.sleep(5)

Here time.sleep(5) is just used to force a delay between prints. Otherwise, even though everything is being printed and then overwritten, it will happen so fast that you will only see the final value 'Update 9'. In your code, it sounds like there is a natural delay while some processes is running, using time.sleep() will not be necessary.

like image 156
elethan Avatar answered Sep 28 '22 10:09

elethan


In python 2.7, the print function will not allow an end parameter, and print 'Update %d\r' will also print a newline character.

Here is the same example @elethan gave for python2.7. Note it uses the sys.stdout output stream:

import sys
import time
output_stream = sys.stdout

for i in xrange(10):
    output_stream.write('Update %s\r' % i)
    output_stream.flush()
    time.sleep(5)
# Optionally add a newline if you want to keep the last update.
output_stream.write('\n')
like image 36
Bamcclur Avatar answered Sep 28 '22 10:09

Bamcclur