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,一经查实,立即删除!

相关文章

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…

如何实现一个K8S DevicePlugin?

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

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

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

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

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

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

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

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

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

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

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

数论 - 博弈论(Nim游戏)

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

React18原理: React核心对象之ReactElement对象和Fiber对象

React中的核心对象 在React应用中,有很多特定的对象或数据结构.了解这些内部的设计,可以更容易理解react运行原理列举从react启动到渲染过程出现频率较高,影响范围较大的对象,它们贯穿整个react运行时 如 ReactElement 对象如 Fi…

IO 作业 24/2/21

1、使用多线程完成两个文件的拷贝&#xff0c;第一个线程拷贝前一半&#xff0c;第二个线程拷贝后一半&#xff0c;主线程回收两个线程的资源 #include <myhead.h> //定义分支线程1 void *task1(void *arg) {int fdr-1;//只读打开被复制文件if((fdropen("./111.txt…

2024光伏展

2024年光伏展是一个专业的光伏行业展览会&#xff0c;旨在展示最新的光伏技术和产品&#xff0c;并促进光伏行业的发展和合作。 该展览会预计将吸引来自全球各地的光伏制造商、供应商、投资者和专业人士。参展的公司将有机会展示他们的最新产品和技术&#xff0c;与其他行业领导…

HTTP协议要点总结

一、什么是 HTTP 协议 1. 超文本传输协议 (HTTP &#xff0c; HyperText Transfer Protocol) 是互联网上应用广泛的一种网络协议。 是工作在 tcp/ip 协议基础上的 , 所有的 WWW 文件都遵守这个标准。 2. http1.0 短连接 http1.1 长连接 3. http 是 TCP/IP 协议的一个…

react实现转盘抽奖功能

看这个文章不错&#xff0c;借鉴 这个博主 的内容 样式是背景图片直接&#xff0c;没有设置。需要的话应该是 #bg { width: 650px; height: 600px; margin: 0 auto; background: url(turntable-bg.jpg) no-repeat; position: relative; } img[src^"pointer"] {positi…

马斯克称首位受试者可凭思维操控鼠标;字节低调推出视频模型丨 RTE 开发者日报 Vol.148

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

微信小程序uniapp校园在线报修系统维修系统java+python+nodejs+php

管理员的主要功能有&#xff1a; 1.管理员输入账户登陆后台 2.个人中心&#xff1a;管理员修改密码和账户信息 3.用户管理&#xff1a;对注册的用户信息进行删除&#xff0c;查询&#xff0c;添加&#xff0c;修改 4.维修工管理&#xff1a;对维修工信息进行添加&#xff0c;修…

SpringBoot+MybatisPlus+Mysql实现批量插入万级数据多种方式与耗时对比

场景 若依前后端分离版本地搭建开发环境并运行项目的教程&#xff1a; 若依前后端分离版手把手教你本地搭建环境并运行项目_本地运行若依前后端分离-CSDN博客 若依前后端分离版如何集成的mybatis以及修改集成mybatisplus实现Mybatis增强&#xff1a; https://blog.csdn.net…

28/100二叉树的中序遍历 29/100不同的二叉搜索树(TODO) 30/100验证二叉搜索树 31/100对称二叉树

题目&#xff1a;28/100 二叉树的中序遍历 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 题解&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() …

gitlab 项目上线,项目上线后回滚

gitlab 项目上线&#xff0c;项目上线后回滚 1.需要自己有个gitlab项目环境&#xff0c;没有找我&#xff0c;docker-compose 一键环境启动 2.发起合并请求3.选择合并的分支4.点击创建合并&#xff0c;然后确认合并合并完成&#xff0c;进行回滚操作&#xff0c;在合并详情页…