大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。
网络监控是保障网络可靠性的一项重要任务。通过实时监控网络性能,我们可以及时发现异常,迅速采取措施,保障网络畅通无阻。本文将以 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 timedef 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 # 转换为 Mbpsupload_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 speedtestclass 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 # 转换为 Mbpsupload_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!
版权说明:本文禁止抄袭、转载,侵权必究!