【问题标题】:How to clear the current line in the Windows console with Python?如何使用 Python 清除 Windows 控制台中的当前行?
【发布时间】:2023-08-09 19:57:01
【问题描述】:

这里有一个实例。

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

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

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

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

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)

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

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

【问题讨论】:

  • 这是命令 cls

标签: python windows printing formatting windows-console


【解决方案1】:

您可以根据 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)

【讨论】:

  • 如果使用迭代器而不是列表并且无法立即获取其元素(例如,在每个epoch中训练大型神经网络模型时的一些输出),则在@987654324之前无法获取m @。你有更好的主意吗?
【解决方案2】:

我在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,55,1]:
    print(f'\033[K{a}',end='\r')
    time.sleep(1)

【讨论】:

    最近更新 更多