求助:如何在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
相关产品推荐
相关产品推荐

