Python如何实现固定标签下数值持续更新而非重复打印内容
实现方案
核心是利用ANSI转义控制符移动光标位置,直接覆盖原有数值区域,不需要重复打印固定标签,视觉上只有数值动态刷新。
完整适配代码
import os os.system('') # Windows旧版cmd环境需加这行启用ANSI转义支持,Linux/macOS可直接删除 import time # 可选,用来控制刷新间隔,避免更新太快看不清 # 你原有的read_log逻辑保留即可,以下是模拟实现方便测试 def read_log(key): import random return random.uniform(0, 100) for x in range(10): if x == 0: # 首次正常打印完整内容 print(f'Machine1 Busy Value : {read_log("machine1_busy_val"):.2f}') print(f'Machine2 Busy Value : {read_log("machine2_busy_val"):.2f}') print(f'Machine3 Busy Value : {read_log("machine3_busy_val"):.2f}') print(f'Machine4 Busy Value : {read_log("machine4_busy_val"):.2f}') else: # 后续循环先将光标上移4行,回到第一行行首位置 print('\033[4F', end='') # 新内容直接覆盖旧内容,视觉上标签固定、数值更新 print(f'Machine1 Busy Value : {read_log("machine1_busy_val"):.2f}') print(f'Machine2 Busy Value : {read_log("machine2_busy_val"):.2f}') print(f'Machine3 Busy Value : {read_log("machine3_busy_val"):.2f}') print(f'Machine4 Busy Value : {read_log("machine4_busy_val"):.2f}') # 自定义刷新间隔,示例为1秒更新一次 time.sleep(1)
极简输出方案(完全不重复打印标签)
如果要彻底避免重复输出标签内容,可使用以下写法,首次只打印标签,后续仅覆盖数值区域:
import os, time os.system('') def read_log(key): import random return random.uniform(0, 100) # 首次仅打印固定标签 print('Machine1 Busy Value : ') print('Machine2 Busy Value : ') print('Machine3 Busy Value : ') print('Machine4 Busy Value : ') for x in range(10): # 回到第一行行首 print('\033[4F', end='') # \r回到当前行行首,22个空格对齐到数值位置,仅更新数值 print(f'\r{" "*22}{read_log("machine1_busy_val"):.2f}') print(f'\r{" "*22}{read_log("machine2_busy_val"):.2f}') print(f'\r{" "*22}{read_log("machine3_busy_val"):.2f}') print(f'\r{" "*22}{read_log("machine4_busy_val"):.2f}') time.sleep(1)
注意事项
- ANSI转义序列
\033[nF表示将光标向上移动n行,根据你需要刷新的行数调整n的数值即可 - 若数值可能出现长度变化(比如从9.99涨到100.00),可以固定数值输出宽度,把
:.2f改成6.2f,保证数值区域长度统一,避免残留旧字符 - 部分终端如果出现刷新延迟,可在print参数里加
flush=True强制立即输出,比如print(xxx, flush=True)
内容的提问来源于stack exchange,提问作者Rafi Hasan
相关产品推荐
相关产品推荐

