如何清除控制台但保留指定打印行?Python循环打印场景需求
保留指定行并刷新控制台输出的实现方法
要实现保留"Your status - online"行,同时刷新后续的搜索状态避免重叠,可以利用ANSI转义序列精确控制光标位置和控制台内容,以下是跨平台的实现方案:
核心实现代码
import sys import time import os # Windows系统需手动启用ANSI转义序列支持 if os.name == 'nt': import ctypes kernel32 = ctypes.windll.kernel32 kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7) # 打印需要保留的固定行 print("Your status - online") # 保存当前光标位置(位于固定行的下一行开头) sys.stdout.write("\033[s") while True: # 恢复光标到之前保存的位置,并清除该行从光标到末尾的内容 sys.stdout.write("\033[u\033[K") # 打印刷新的状态内容 sys.stdout.write("Searching for server") # 强制刷新缓冲区,确保内容立即显示 sys.stdout.flush() # 模拟搜索操作的延迟(可根据实际场景调整) time.sleep(1)
关键逻辑说明
\033[s:保存当前光标位置,后续循环可以快速回到固定行的下一行开头。\033[u:恢复到之前保存的光标位置,确保每次都在同一行更新内容。\033[K:清除当前行中光标位置到末尾的所有内容,避免旧内容残留重叠。- 使用
sys.stdout.write而非print:print会自动添加换行符,破坏光标位置控制;write能更精准地控制输出内容和位置。 sys.stdout.flush():强制将缓冲区内容输出到控制台,避免因缓冲导致的更新延迟。
效果说明
运行代码后,控制台会始终显示Your status - online在第一行,第二行的Searching for server会每隔1秒刷新一次(不会产生多行重叠的情况)。
内容的提问来源于stack exchange,提问作者wasdy
相关产品推荐
相关产品推荐

