问题描述
在此处给出一个实例。
对于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)