本文目录导读:

我来为您提供一个定时监测并记录网速的脚本,这个脚本可以定期测试网络速度并保存记录。
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文件,并显示统计信息,您可以根据需要调整测试间隔和日志格式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播