Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Carriage Return not working in IDLE?

I'm trying to create a code for a countdown timer that stays in place: so that each line overwrites the previous one. This is what I have so far:

import time

def countdown(t):
    while t:
        mins, secs = divmod(t, 60)
        timeformat = "{:02d}:{:02d}".format(mins, secs)
        print(timeformat, end='\r')
        time.sleep(1)
        t -= 1
    print("That's the end! You lose...\n\n\n\n\n")
    exit()

countdown(10)

The output, however, is:

00:10
00:09
00:08
...
00:00
That's the end! You lose...

Why is the carriage return seemingly not working?

like image 746
GM.Ghost Avatar asked Mar 03 '16 09:03

GM.Ghost


2 Answers

When \r doesn't work, try \x08 (backspace), and add the flush=True to be safe:

print('\x08' * 5 + timeformat, end='', flush=True)
like image 70
Ethan Furman Avatar answered Sep 28 '22 03:09

Ethan Furman


IDLE doesn't support most control characters such as \r, \b. It is still true in 2020 (no support in Python 3.9)

\r should work if you start Python REPL in a Unix terminal or in Windows console instead.

like image 30
jfs Avatar answered Sep 28 '22 03:09

jfs