本文目录导读:

我来为您提供一个定时监测并记录网速的脚本,这个脚本可以定期测试网络速度并保存记录。
Python脚本(最完整)
首先安装依赖
pip install speedtest-cli schedule
Python监测脚本
#!/usr/bin/env python3
"""
网络速度定时监测脚本
功能:定时测试网速并记录到文件
"""
import speedtest
import csv
import os
from datetime import datetime
import schedule
import time
import logging
from typing import Dict, Any
# 配置
LOG_FILE = "network_speed_log.csv"
TEST_INTERVAL = 30 # 测试间隔(分钟)
LOG_LEVEL = logging.INFO
# 设置日志
logging.basicConfig(
level=LOG_LEVEL,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('speed_monitor.log'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
class SpeedMonitor:
def __init__(self, log_file: str = LOG_FILE):
self.log_file = log_file
self.init_csv()
def init_csv(self):
"""初始化CSV文件,如果不存在则创建并写入表头"""
if not os.path.exists(self.log_file):
with open(self.log_file, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow([
'时间',
'下载速度(Mbps)',
'上传速度(Mbps)',
'延迟(ms)',
'服务器',
'IP地址'
])
logger.info(f"创建日志文件: {self.log_file}")
def test_speed(self) -> Dict[str, Any]:
"""测试网络速度"""
try:
logger.info("开始网速测试...")
st = speedtest.Speedtest()
# 获取最佳服务器
st.get_best_server()
# 测试下载速度(转换为Mbps)
download_speed = st.download() / 1_000_000
logger.info(f"下载速度测试完成: {download_speed:.2f} Mbps")
# 测试上传速度(转换为Mbps)
upload_speed = st.upload() / 1_000_000
logger.info(f"上传速度测试完成: {upload_speed:.2f} Mbps")
# 获取服务器信息和延迟
server = st.results.server
ping = st.results.ping
return {
'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'download': round(download_speed, 2),
'upload': round(upload_speed, 2),
'ping': round(ping, 1),
'server': server.get('sponsor', 'Unknown'),
'ip': st.results.client.get('ip', 'Unknown')
}
except speedtest.SpeedtestException as e:
logger.error(f"网速测试失败: {str(e)}")
return None
except Exception as e:
logger.error(f"未知错误: {str(e)}")
return None
def save_result(self, result: Dict[str, Any]):
"""保存测试结果到CSV文件"""
if result is None:
return
try:
with open(self.log_file, 'a', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow([
result['timestamp'],
result['download'],
result['upload'],
result['ping'],
result['server'],
result['ip']
])
logger.info(f"结果已保存: {result['download']}Mbps down / {result['upload']}Mbps up")
except Exception as e:
logger.error(f"保存结果失败: {str(e)}")
def run_test(self):
"""执行一次完整的测试"""
logger.info("=" * 50)
logger.info("开始网速测试周期")
result = self.test_speed()
self.save_result(result)
if result:
print(f"\n📊 测试结果:")
print(f" 时间: {result['timestamp']}")
print(f" 下载速度: {result['download']} Mbps")
print(f" 上传速度: {result['upload']} Mbps")
print(f" 延迟: {result['ping']} ms")
print(f" 服务器: {result['server']}")
print(f" IP地址: {result['ip']}")
logger.info("测试周期完成")
logger.info("=" * 50)
def main():
"""主函数"""
monitor = SpeedMonitor()
# 立即执行一次测试
monitor.run_test()
# 设置定时任务
schedule.every(TEST_INTERVAL).minutes.do(monitor.run_test)
print(f"\n🕐 定时监测已启动,每 {TEST_INTERVAL} 分钟测试一次")
print(f"📁 日志文件: {LOG_FILE}")
print("按 Ctrl+C 停止监测\n")
try:
while True:
schedule.run_pending()
time.sleep(1)
except KeyboardInterrupt:
print("\n👋 监测已停止")
logger.info("监测程序已停止")
if __name__ == "__main__":
main()
简单的Shell脚本(Linux/Mac)
#!/bin/bash
# 网速监测脚本
LOG_FILE="network_speed.log"
INTERVAL=300 # 5分钟
# 创建日志文件头
echo "时间, 下载速度(Mbps), 上传速度(Mbps), 延迟(ms)" > $LOG_FILE
echo "开始监测网速,每 $((INTERVAL/60)) 分钟记录一次..."
while true; do
# 获取当前时间
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
# 使用 iperf3 测试(需要服务器)
# 或者使用 curl 简单测试
DOWNLOAD_SPEED=$(curl -s -o /dev/null -w '%{speed_download}' http://speedtest.tele2.net/100MB.zip 2>/dev/null)
DOWNLOAD_MBPS=$(echo "scale=2; $DOWNLOAD_SPEED * 8 / 1000000" | bc)
# 记录结果
echo "$TIMESTAMP, $DOWNLOAD_MBPS, 0, 0" >> $LOG_FILE
echo "[$TIMESTAMP] 下载速度: ${DOWNLOAD_MBPS}Mbps"
sleep $INTERVAL
done
Windows Batch脚本
@echo off
setlocal enabledelayedexpansion
:: 配置
set LOG_FILE=network_speed_log.csv
set INTERVAL=300
:: 创建日志文件头
echo 时间, 下载速度(Mbps), 上传速度(Mbps), 延迟(ms) > %LOG_FILE%
echo 开始监测网速...
:loop
:: 获取当前时间
for /f "tokens=*" %%a in ('wmic os get localdatetime ^| find "."') do set datetime=%%a
set TIMESTAMP=%datetime:~0,4%-%datetime:~4,2%-%datetime:~6,2% %datetime:~8,2%:%datetime:~10,2%:%datetime:~12,2%
:: 测试网速(需要安装speedtest-cli)
:: speedtest-cli --simple >> temp.txt
:: 记录到文件
echo %TIMESTAMP%, 测试中, 测试中, 测试中 >> %LOG_FILE%
echo [%TIMESTAMP%] 网速测试中...
:: 等待
timeout /t %INTERVAL% /nobreak > nul
goto loop
使用说明
Python版本(推荐):
- 保存脚本为
speed_monitor.py - 安装依赖:
pip install speedtest-cli schedule - 运行:
python speed_monitor.py
配置选项:
TEST_INTERVAL: 测试间隔(分钟)LOG_FILE: 日志文件名- 可自定义保存格式和数据量
数据分析建议:
# 数据分析脚本示例
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_csv('network_speed_log.csv')
df['时间'] = pd.to_datetime(df['时间'])
# 绘制图表
plt.figure(figsize=(12, 6))
plt.plot(df['时间'], df['下载速度(Mbps)'], label='下载速度')
plt.plot(df['时间'], df['上传速度(Mbps)'], label='上传速度')
plt.xlabel('时间')
plt.ylabel('速度 (Mbps)')'网速变化趋势')
plt.legend()
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('speed_trend.png')
plt.show()
# 统计信息
print(f"平均下载速度: {df['下载速度(Mbps)'].mean():.2f} Mbps")
print(f"最大下载速度: {df['下载速度(Mbps)'].max():.2f} Mbps")
print(f"最小下载速度: {df['下载速度(Mbps)'].min():.2f} Mbps")
这个脚本会自动运行网速测试,记录结果到CSV文件,并显示统计信息,您可以根据需要调整测试间隔和日志格式。