Python如何实现两行print内容原位循环更新且不合并打印语句
实现思路
你原来的代码仅用\r只能让光标回到当前行的开头,无法修改上一行的内容,因此需要通过ANSI转义序列控制光标位置实现两行原地更新,具体逻辑如下:
- 首次循环时正常输出两行内容,完成初始占位
- 后续每次循环开始时,先通过ANSI控制码将光标向上移动2行,回到第一行的起始位置
- 两次独立调用
print分别输出两行内容,每行末尾添加清行控制码,避免数字位数变化时残留旧字符
可运行实现代码
import time i = 0 b = 0 is_first_run = True while True: i += 1 b += 1 time.sleep(2) # 非首次运行时,光标上移2行回到第一行开头 if not is_first_run: print("\033[2A", end='') # 独立打印第一行,末尾加清行控制符 print('Jack: {} \033[K'.format(str(i))) # 独立打印第二行,末尾加清行控制符 print('Han : {} \033[K'.format(str(b))) is_first_run = False
说明
- 代码中两个
print完全独立,没有合并,符合要求 - ANSI转义序列兼容绝大多数现代终端(Windows 10 1511+版本的CMD、PowerShell,Linux、MacOS的默认终端均支持)
- 旧版Windows终端如果无法生效,可以在代码开头添加以下内容开启虚拟终端支持:
import ctypes kernel32 = ctypes.windll.kernel32 kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
内容的提问来源于stack exchange,提问作者Hạnh Nguyễn
相关产品推荐
相关产品推荐

