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

求助:如何在Python的tracert函数中添加Progressbar进度条

给tracert功能添加进度条的解决方案

原代码使用subprocess.check_output()会等待tracert命令完全执行结束才返回结果,无法实时追踪执行进度,所以没法实现进度条。要解决这个问题,我们需要实时读取tracert的输出流,结合进度条工具来更新进度。

步骤1:安装进度条库

先安装tqdm(轻量易用的进度条工具):

pip install tqdm

步骤2:修改后的代码

import subprocess
from tqdm import tqdm

def tracertapp():
    def tracert1(x):
        # Windows的tracert默认最多30跳,以此作为进度条总长度
        max_hops = 30
        # 启动tracert进程,实时读取输出
        process = subprocess.Popen(
            ["tracert", x],
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
            universal_newlines=True,
            shell=False
        )
        
        # 初始化进度条
        progress_bar = tqdm(total=max_hops, desc="追踪进度", unit="跳")
        full_result = []
        
        # 逐行读取输出
        for line in iter(process.stdout.readline, ''):
            full_result.append(line)
            # 判断是否是有效跳数行(Windows tracert的行格式以数字跳数开头)
            if line.strip().startswith(tuple(str(i) for i in range(1, max_hops+1))):
                progress_bar.update(1)
        
        # 等待进程结束,关闭进度条
        process.wait()
        progress_bar.close()
        
        # 打印完整结果
        print("\n完整追踪结果:")
        print(''.join(full_result))
    
    ip = input("输入目标IP或域名:")
    tracert1(ip)

tracertapp()

代码说明

  • 用subprocess.Popen()替代check_output(),实现实时读取命令输出流的功能。
  • 针对Windows系统tracert默认30跳的规则,设置进度条总长度,每识别到一行有效跳数输出就更新进度。
  • 同时收集所有输出内容,命令执行完毕后打印完整追踪结果。
  • 如果是Linux/macOS系统,需将命令改为traceroute,并根据系统默认跳数调整max_hops的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:05:18