You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:无法同时显示两个自定义Progress Bar的问题

解决多进度条显示被覆盖的问题

你的问题根源在于使用了\r(回车符)——它只会将光标移回到当前行的开头,而不是新行。所以当第二个进度条输出时,会直接覆盖掉第一行的内容。要同时显示多个进度条,我们需要让每个进度条占据独立的行,并通过终端光标控制来更新对应行的内容。

解决方案:使用ANSI光标控制序列

现代终端几乎都支持ANSI转义序列,我们可以用它来移动光标到指定行,从而实现多进度条的独立更新。下面是修改后的代码:

修改后的ProgressBar类

import sys

class ProgressBar():
    full_size = 100
    standard = 50
    small = 25
    def __init__(self, pretext, length=50, total=100):
        self.pretext = pretext
        self.length = length
        self.total = total
        self.is_initialized = False  # 标记进度条是否已首次输出

    def update_bar(self, fill_amount):
        real_fill_amount = int(self.length * fill_amount / self.total)
        # 构建进度条字符串
        bar_content = f"{self.pretext} |{'█' * real_fill_amount}{'░' * (self.length - real_fill_amount)}| {fill_amount}%"
        
        if not self.is_initialized:
            # 首次输出直接打印并换行,占据一行
            sys.stdout.write(bar_content + "\n")
            self.is_initialized = True
        else:
            # 回到当前行开头,覆盖原有内容
            sys.stdout.write("\r" + bar_content)
        sys.stdout.flush()

调整后的监控示例代码

from pout_progressbar import ProgressBar
import psutil
import time

bar1 = ProgressBar("CPU Usage", length=ProgressBar.standard, total=100)
bar2 = ProgressBar("Memory Usage", length=ProgressBar.standard, total=100)

# 先初始化两个进度条的行(让它们各占一行)
bar1.update_bar(0)
bar2.update_bar(0)

while True:
    cpu_percent = int(psutil.cpu_percent(interval=1))
    mem_percent = int(psutil.virtual_memory().percent)
    
    # 移动光标到第一个进度条的行(向上移动1行)
    sys.stdout.write("\033[F")
    bar1.update_bar(cpu_percent)
    
    # 移动光标回到第二个进度条的行(向下移动1行)
    sys.stdout.write("\033[B")
    bar2.update_bar(mem_percent)
    
    time.sleep(0.5)

原理说明

  • \033[F:ANSI转义序列,让光标向上移动一行
  • \033[B:让光标向下移动一行
  • 首次输出进度条时换行,确保每个进度条占据独立的行;后续更新时,先移动光标到对应行的开头,再覆盖原有内容,这样就不会互相干扰了。

注意事项

如果是在Windows的传统CMD中运行,可能需要先开启VT100支持,才能识别ANSI转义序列。可以在代码开头添加以下内容:

import os
if os.name == 'nt':
    os.system("")  # 开启CMD的ANSI支持

内容的提问来源于stack exchange,提问作者Cubemation

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:58:47