wget -o日志字段含义及下载Mbps速率提取方法
首先明确:wget默认会自动检测输出目标是否为交互式终端(TTY):如果是在终端手动运行,就输出你看到的可实时刷新的bar格式进度条;如果输出被重定向到文件、管道,或者被程序(比如你的Python脚本)捕获,就自动切换为dot格式的非交互进度日志,也就是你写文件得到的格式。
1. dot格式日志各列含义
以单条日志为例逐列解释:
50K .......... .......... .......... .......... .......... 0% 1.68M 71s
- 第1列:累计已下载数据量,默认单位为KB,此处代表到当前输出节点总共下载了50KB数据。
- 第2部分:点形进度标记,每个
.代表成功下载1KB数据,每行固定输出50个点,对应每打印一行就代表刚完成50KB的下载量。 - 第3列:整体下载进度百分比,计算方式是「累计已下载量/文件总大小」。
- 第4列:下载启动到当前节点的全程平均速率,单位为字节每秒(不是比特每秒),
1.68M即1.68 MB/s。 - 第5列:按当前平均速率估算的剩余下载时长,单位为秒;当下载到最后阶段剩余时长不足1秒时显示
0s,下载完成行的=30s代表整个下载过程总耗时为30秒。 - 下载完成后最终打印的
(3.37 MB/s)是整个下载流程的全程平均速率。
2. 速率字段的认知纠正
你对这两个速率值的理解存在两处错误:
- 单位错误:日志里的
1.68M单位是MB/s(兆字节每秒),不是Mbps(兆比特每秒),二者换算关系为1 MB/s = 8 Mbps,1.68MB/s实际对应13.44Mbps的传输速率。 - 统计范围错误:
1.68M不是前50KB分段的下载速率,是从下载启动到累计下载50KB这个时间点的全程平均速率;同理1.70M是从下载启动到累计下载100KB节点的全程平均速率,并非第二个50KB分段的独立速率。
补充:Python场景下采集每秒级速率的实现提示
直接用wget -o写日志的方式无法满足每秒1次的采集要求:非交互dot模式下wget默认每下载50KB才输出一行日志,高速下载时1秒可输出数行,低速下载时可能数秒才输出一行,时间间隔完全不固定。
如果要实现稳定的每秒速率采集,两个方案可选:
- 调用wget时添加
--progress=bar:force参数强制使用bar格式进度,同时加--report-speed=bits直接输出比特为单位的速率,Python侧通过伪终端(pty)模拟TTY环境启动wget进程,实时捕获stderr输出解析速率即可。 - 不依赖wget,直接用Python的
requests/httpx等库做流式下载,自行维护已下载字节计数器,启动独立线程每秒统计字节增量换算为Mbps,精度更高且无终端兼容问题。
内容的提问来源于stack exchange,提问作者RightmireM
相关产品推荐
相关产品推荐

