Python 写网络监控

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。

网络监控是保障网络可靠性的一项重要任务。通过实时监控网络性能,我们可以及时发现异常,迅速采取措施,保障网络畅通无阻。本文将以 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!

版权说明:本文禁止抄袭、转载,侵权必究!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/694197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Debug系列 GroupNorm和BatchNorm出现Nan或inf的情况

Debug系列 GroupNorm和BatchNorm出现Nan或inf的情况 前言这两个函数做了什么可能出现的问题解决方法train和evalbatchsize或channel设置过小可训练参数的问题数值溢出其它的方法 前言 在复现别人论文的实验结果时,按照README乖乖做完之后,却发现损失函数…

Windows / Linux dir 命令

Windows / Linux dir 命令 1. dir2. dir *.* > data.txt3. dir - list directory contentsReferences 1. dir 显示目录的文件和子目录的列表。 Microsoft Windows [版本 10.0.18363.900] (c) 2019 Microsoft Corporation。保留所有权利。C:\Users\cheng>dir驱动器 C 中…

线性代数:向量组的秩

目录 回顾“秩” 及 向量组线性表示 相关特性 向量组的秩 例1 例2 矩阵的“秩” 及 向量组线性表示 相关特性 向量组的秩 例1 例2

@Async引发的spring循环依赖的问题,

今天发现一个很有意思的问题,正常解决项目中产生的循环依赖,是找出今天添加的注入代码,然后一个个加lazy试过去,会涉及到类中新增的注入 但是今天修改了某个serviceimpl的方法,加入了Async方法后 就发生循环依赖了 ai…

【职场经验】关于自动化用例设计的思考

为什么要设计用例? 作为质量保证(QA)人员,设计测试用例的重要性不亚于开发人员编写技术实现方案。如果实现方案设计不周,编码阶段将可能遇到许多问题;同理,如果我们未能设计测试用例,产品质量就难以得到充…

如何实现一个K8S DevicePlugin?

什么是device plugin k8s允许限制容器对资源的使用,比如CPU和内存,并以此作为调度的依据。 当其他非官方支持的设备类型需要参与到k8s的工作流程中时,就需要实现一个device plugin。 Kubernetes提供了一个设备插件框架,你可以用…

机器视觉系统选型-为什么还要选用工业光源控制器

工业光源控制器最主要的用途是给光源供电,实现光源的正常工作。 1.开关电源启动时,电压是具有波浪的不稳定电压,其瞬间峰值电压超过了LED灯的耐压值,灯珠在多次高压冲击下严重降低了使用寿命; 2.使用专用的光源控制器&…

【算法学习】搜索算法之深度优先搜索

深度优先搜索 DFS 1.算法介绍 深度优先搜索(DFS)算法是一种用于遍历或搜索树或图的算法。它的基本思想是尽可能深地搜索图的分支,直到到达叶节点或无法再深入为止,然后回溯到前一个节点,继续探索其他分支。这种搜索策略可以确保图中的每个节点都被访问到,除非它是一个环。…

inBuilder低代码平台新特性推荐-第十六期

各位友友们,大家好~今天来给大家介绍一下inBuilder低代码平台社区版中的系列特性之一 —— 构件热加载! 01 概述 构件热加载指的是:构件代码修改后,无需重启应用,通过WebIDE的部署或发布工程后,即可正常调…

08-静态pod(了解即可,不重要)

我们都知道,pod是kubelet创建的,那么创建的流程是什么呐? 此时我们需要了解我们k8s中config.yaml配置文件了; 他的存放路径:【/var/lib/kubelet/config.yaml】 一、查看静态pod的路径 [rootk8s231 ~]# vim /var/lib…

代码的复用——Mixin使用例子

Mixin(混入)是一种在Sass和Vue.js等框架中常用的技术,用于分发和重用代码。以下是Sass和Vue.js中Mixin的使用举例。 在Sass中,Mixin允许你定义可以在整个样式表中重复使用的样式。以下是一个Sass中Mixin的使用例子: …

华为配置直连三层组网直接转发示例

华为配置直连三层组网直接转发示例 组网图形 图1 配置直连三层组网直接转发示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户接入WLAN网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff…

标题:从预编译到链接:探索C/C++程序的翻译环境全貌

引言 在软件开发的世界里,我们通常会遇到两种不同的环境——翻译环境与运行环境。今天,我们将聚焦于前者,深入剖析C/C程序生命周期中至关重要的“翻译环境”,即从源代码到可执行文件这一过程中涉及的四个关键阶段:预编…

三七互娱,顺丰24春招内推

三七互娱,顺丰24春招内推 ①三七互娱 【介绍】知名上市游戏企业,24届本科及以上可投递,使用内推码,面试快人一步! 【岗位】美术设计类,运营类,游戏研发类,策划类,市场推广…

设备改造经历干扰处理

设备改造完了,终于松了口气。没过几天,客户打电话过来,刚松了的那口气立马又吊了起来。通过客户描述,感觉麻烦来了。 客户每台机器都用了4台伺服,国产某品牌的,之前就经常发生液压站压力变送器损坏、某个环节偶尔不工作等情况,通过增加滤波电路、分开走线等措施解决了。…

开发的软件如何在安卓市场上架

要在安卓市场上架开发的软件,你需要遵循一系列步骤来确保你的应用符合市场的要求和标准。以下是一个基本的上架流程: 1. 注册开发者账号 在Android安卓市场(如Google Play Store)上注册一个开发者账号。提供必要的信息&#xff…

LeetCode 算法题 (数组)存在连续3个奇数的数组

问题: 输入一个数组,并输入长度,判断数组中是否存在连续3个元素都是奇数的情况,如果存在返回存在连续3个元素都是奇数的情况,不存在返回不存在连续3个元素都是奇数的情况 例一: 输入:a[1,2,3…

数论 - 博弈论(Nim游戏)

文章目录 前言一、Nim游戏1.题目描述输入格式输出格式数据范围输入样例:输出样例: 2.算法 二、台阶-Nim游戏1.题目描述输入格式输出格式数据范围输入样例:输出样例: 2.算法 三、集合-Nim游戏1.题目描述输入格式输出格式数据范围输…

Python编程-使用OpenCV和Numpy库实现图片去水印(附代码)

目录 安装OpenCV和NumPy库 开始 读取图像 选取水印位置 删除指定位置的水印 去除并修复水印(完整代码) 优化修复方法 效果(标红区域是原水印位置) 注意 安装OpenCV和NumPy库 cv2是基于OpenCV的图像处理库,可以对图像进行腐蚀,膨胀等操作;Numpy这是一个强大的处理矩…

【C++】创建多级目录下的指定文件

文章目录 一、判断文件存在二、获取文件所在目录三、创建指定目录四、使用方法 一、判断文件存在 static bool exists(const std::string &pathname) {// 方法1 获取文件状态,若存在则可能获取成功,若不存在则一定失败struct stat st;if (stat(path…