告别手动测速:用Python脚本精准监控网络速度的完整指南(附代码)
目录导读
- 为什么你需要用脚本测速? —— 手动测速的痛点与自动化场景
- 脚本测速的核心原理 —— 基于
speedtest-cli与ping的底层逻辑 - 环境搭建与工具选择 —— Windows/Mac/Linux通用方案
- 实战代码:三行命令获取实时带宽 —— 可复制的Python脚本
- 进阶技巧:定时记录网速波动 —— 搭配
cron或任务计划程序 - 结果可视化与告警 —— 生成CSV图表与邮件通知
- 常见问题FAQ —— 解决测速不准、权限报错等疑难杂症
为什么你需要用脚本测速?
手动打开网页测速工具(如Speedtest网站)不仅繁琐,且无法捕捉瞬时波动,当你怀疑网络丢包影响视频会议时,需要的是连续监测数据,而非单次结果,脚本测速能实现:

- 定时自动巡检(如每5分钟记录一次)
- 历史趋势分析(判断运营商是否限速)
- 触发式告警(当下载速度低于阈值时自动通知)
这相当于为你的网络装了个“心电图仪”。
脚本测速的核心原理
主流方案基于两大技术:
- HTTP多线程下载/上传:通过
speedtest-cli库,它自动选择最近的测试服务器,模拟多线程传输计算吞吐量。 - ICMP延迟测试:用
ping命令获取响应时间,判断网络抖动(Jitter)。
脚本本质是封装这些操作,并将结果格式化输出。注意:测速消耗流量,高频测试可能影响正常上网。
环境搭建与工具选择
- 安装Python(3.7+版本,官网下载后勾选“Add to PATH”)。
- 安装核心库:在终端/命令提示符运行
pip install speedtest-cli。 - 跨平台兼容:脚本兼容Windows(用
Task Scheduler定时)、macOS(用launchd)、Linux(用crontab)。小贴士:若需测试Wi-Fi信号质量,可额外用
wifi库获取RSSI值。
实战代码:三行命令获取实时带宽
创建一个get_net_speed.py文件,粘贴以下代码:
import speedtest
def test_network():
st = speedtest.Speedtest()
st.get_best_server()
download_mbps = st.download() / 1_000_000 # 转换为Mbps
upload_mbps = st.upload() / 1_000_000
ping_ms = st.results.ping
print(f"Ping: {ping_ms:.1f}ms | Download: {download_mbps:.2f}Mbps | Upload: {upload_mbps:.2f}Mbps")
# 可选:将结果追加到CSV文件
with open('network_log.csv', 'a') as f:
f.write(f"{datetime.now()},{ping_ms:.1f},{download_mbps:.2f},{upload_mbps:.2f}\n")
if __name__ == '__main__':
test_network()
运行方式:在项目目录执行 python get_net_speed.py,约10秒后输出结果,若需要忽略证书错误,加--secure参数。
进阶技巧:定时记录网速波动
Linux/macOS定时任务(每30分钟执行):
crontab -e # 添加行: */30 * * * * cd /你的脚本路径 && python get_net_speed.py
Windows定时任务:
- 打开“任务计划程序” → 创建基本任务
- 选择“每天” → 设置间隔为30分钟
- 操作选“启动程序”,程序填
python.exe路径,参数填脚本全路径。
结果可视化与告警
- 生成图表:用
pandas+matplotlib读取CSV文件绘制速度折线图。 - 邮件告警:稍作修改,当
download_mbps < 10时,用smtplib发送告警邮件。
这里提供一段告警片段:if download_mbps < 10: import smtplib # 发送邮件代码(需填写SMTP配置) print("⚠️ 慢速告警:当前下载速率低于10Mbps")
常见问题FAQ
Q1:脚本报错“speedtest-cli 不是内部命令”怎么办?
A:确认Python Scripts目录已加入系统PATH(安装时勾选),或改用 python -m speedtest 命令。
Q2:测速结果总比网站测速低?
A:脚本默认使用最近服务器,而网站可能选择更优节点,尝试在脚本中手动指定服务器ID(如st.get_servers([12345]))。
Q3:能否测试内网NAS速度?
A:可以,将代码中的目标URL改为局域网IP(如http://192.168.1.10/100MB.bin),用requests模块下载同文件计算耗时。
Q4:如何检测网络稳定性(丢包率)?
A:用ping命令的-c 20(Linux)或-n 20(Windows)参数,统计loss字段,可内嵌subprocess模块调用系统命令。