如何用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)
这里举个例子。
对于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)