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

问题描述

在此处给出一个实例。

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

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

但是它不适用于Windows。关键是,尽管它适用于Linux,但是print('\033[K'+'Anything',end='\r')无法清除当前行。

我知道使用许多空格符号的另一种方法

for a in [999,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)

我不喜欢后面的空格符号。

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

解决方法

您可以根据f字符串中的列表值以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: How can I make the ANSI escape codes to work also in 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,1]:
    print(f'\033[K{a}',end='\r')
    time.sleep(1)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...