大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。
网络监控是保障网络可靠性的一项重要任务。通过实时监控网络性能,我们可以及时发现异常,迅速采取措施,保障网络畅通无阻。本文将以 Python为工具,介绍如何编写一个简单而强大的网络监控程序,并封装成 GUI 工具帮助你实时把握网络状况,及时发现并解决潜在问题。
目录
- 一、准备工作
- 二、编写网络监控脚本
- 三、封装为 GUI 工具
- 四、作者Info
一、准备工作
欲行其事,必先利其器,本期实战需要 3 个 Python 第三方库
用于获取系统资源的库:
pip install psuntil -i https://pypi.doubanio.com/simple
用于测量网络速度的库:
pip install speedtest-cli -i https://pypi.doubanio.com/simple
用于把网络监控脚本封装成 GUI 工具的库:
pip install PyQt5 -i https://pypi.doubanio.com/simple
二、编写网络监控脚本
新建一个名为 network_monitor.py 的 Python 脚本:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import psutil
import speedtest
import time
def monitor_network():
while True:
# 获取系统资源利用情况
disk_usage = psutil.disk_usage('/')
cpu_usage = psutil.cpu_percent(interval=1)
memory_usage = psutil.virtual_memory().percent
# 测量网络速度
st = speedtest.Speedtest()
download_speed = st.download() / 1024 / 1024 # 转换为 Mbps
upload_speed = st.upload() / 1024 / 1024 # 转换为 Mbps
# 打印监控信息
print(f'磁盘使用率:{disk_usage.percent}%')
print(f'磁盘总量:{disk_usage.total / 1024 ** 3:.2f}GB')
print(f'磁盘剩余量:{disk_usage.free / 1024 ** 3:.2f}GB')
print(f'磁盘已使用量:{disk_usage.used / 1024 ** 3:.2f}GB')
print(f"CPU 使用率: {cpu_usage}%")
print(f"内存使用率: {memory_usage}%")
print(f"下载速度: {download_speed:.2f} Mbps")
print(f"上传速度: {upload_speed:.2f} Mbps")
print("-" * 30)
# 每隔一段时间进行监控
time.sleep(300) # 每5分钟监控一次
if __name__ == "__main__":
monitor_network()
运行此脚本,即可实时获取系统的磁盘使用情况、 CPU 使用率、内存使用率以及网络的下载和上传速度。此处写了一个死循环,每隔 5 分钟将相应的监控数据打印到控制台上,效果如下:
从图中可看出,除了磁盘使用情况外,其他监控数据都在变化
通过将这个网络监控工具部署到你的服务器或本地计算机上,你可以方便地监测网络性能,及时发现问题并作出相应的调整,以保障网络的高效稳定运行。
三、封装为 GUI 工具
为了将上述网络监控代码利用 PyQt5 封装成可视化的 GUI 工具,我们需要创建一个简单的图形用户界面,使用 PyQt5 的模块进行布局和交互。以下是一个基本的示例:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel
from PyQt5.QtCore import Qt, QTimer
import psutil
import speedtest
class NetworkMonitorGUI(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
# 创建 QLabel 用于显示监控信息
self.label = QLabel()
self.label.setAlignment(Qt.AlignLeft)
# 创建垂直布局
layout = QVBoxLayout()
layout.addWidget(self.label)
# 设置主窗口的布局
self.setLayout(layout)
# 创建定时器,每隔一段时间更新监控信息
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_monitor_info)
self.timer.start(5000) # 每5秒更新一次
# 设置主窗口的属性
self.setWindowTitle('Network Monitor')
self.setGeometry(100, 100, 400, 200)
# 显示主窗口
self.show()
def update_monitor_info(self):
# 获取系统资源利用情况
disk_usage = psutil.disk_usage('/')
cpu_usage = psutil.cpu_percent(interval=1)
memory_usage = psutil.virtual_memory().percent
# 测量网络速度
st = speedtest.Speedtest()
download_speed = st.download() / 1024 / 1024 # 转换为 Mbps
upload_speed = st.upload() / 1024 / 1024 # 转换为 Mbps
# 更新 QLabel 显示的监控信息
info = f"磁盘使用率:{disk_usage.percent}%\n" \
f"磁盘总量:{disk_usage.total / 1024 ** 3:.2f}GB\n" \
f"磁盘剩余量:{disk_usage.free / 1024 ** 3:.2f}GB\n" \
f"磁盘已使用量:{disk_usage.used / 1024 ** 3:.2f}GB\n" \
f"CPU 使用率: {cpu_usage}%\n" \
f"内存使用率: {memory_usage}%\n" \
f"下载速度: {download_speed:.2f} Mbps\n" \
f"上传速度: {upload_speed:.2f} Mbps"
self.label.setText(info)
if __name__ == '__main__':
app = QApplication(sys.argv)
gui = NetworkMonitorGUI()
sys.exit(app.exec_())
这个代码创建了一个简单的 PyQt5 GUI 应用程序,其中包含一个 QLabel 用于显示网络监控信息。使用 QTimer 定时器每隔一段时间更新监控信息,并通过 setText 方法更新 QLabel 中的显示文本
保存上述代码为 network_monitor_gui.py,运行它,即可看到一个简单的网络监控 GUI 工具,效果如下:
在实际项目中,你可以根据需求进行更复杂的布局和交互设计。
希望本文对你了解如何使用 Python 编写网络监控工具有所帮助。如果有任何疑问或建议,可以与我交流。感谢阅读!
四、作者Info
Author:小鸿的摸鱼日常,Goal:让编程更有趣!
专注于算法、爬虫,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!
版权说明:本文禁止抄袭、转载,侵权必究!