如何用Python清除Windows控制台中的当前行?

How to clear the current line in the Windows console with Python?

这里举个例子。

对于Linux,递减计数器可以实现为:

# work for Linux
import time
for a in [999,55,1]:
    print(f'3[K{a}',end='\r')
    time.sleep(1)

但它不适用于 Windows。关键是当前行不能被print('3[K'+'Anything', end='\r')清除,虽然它对Linux有效。

我知道另一种使用许多 space 符号的方法:

for a in [999,55,1]:
    print(f'{a}  ',end='\r') # two space symbols
    time.sleep(1)

然而它并不总是完美的,如果列表被更改:

for a in [8888888,77,3]:
    print(f'{a}  ',end='\r') # space symbols are not enough
    time.sleep(1)

而且我不喜欢后面的 space 个符号。

如何用Python清除Windows控制台中的当前行?为简单起见,避免使用包。

您可以根据 f-strings 中的列表值动态填充空格,如 f'{a:<{m}}':

import time

lst = [9999999,55,1]
m = max(len(str(x)) for x in lst)
for a in lst:
    print(f'{a:<{m}}', end='\r') # m space symbols
    time.sleep(1)

我在 Python 中找到了它:如何使 ANSI 转义码在 Windows 中也能工作?

效果很好:

# work for Linux & Windows
import time
import platform

if platform.system() == 'Windows':
    from ctypes import windll
    windll.kernel32.SetConsoleMode(windll.kernel32.GetStdHandle(-11), 7)

for a in [999,55,1]:
    print(f'3[K{a}',end='\r')
    time.sleep(1)