[Python] Python运维:系统性能信息模块psutil和系统批量运维管理器paramiko

article/2025/7/28 16:56:57

初次学习,如有错误还请指正

目录

系统性能信息模块psutil

获取系统性能信息

CPU信息

内存信息

磁盘信息

网络信息

其他信息

进程信息

实用的IP地址处理模块IPy

IP地址、网段的基本处理

多网络计算方法

系统批量运维管理器paramiko

paramiko 的安装

Linux系统部署Python环境

1.安装环境

2.解压

3.编译

4.创建软目录

5.pip国内镜像源配置

6.pip安装psutil

paramiko 的核心组件

SSHClient 类

SFTPClinent类


系统基础信息采集模块作为监控模块的重要组成部分,能够帮助运维人员了解当前系统的健康程度,同时也是衡量业务的服务质量的依据,比如系统资源吃紧,会直接影响业务的服务质量及用户体验,另外获取设备的流量信息,也可以让运维人员更好地评估带宽、设资源是否应该扩容。

系统性能信息模块psutil

psutl是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。

pip install psutil

获取系统性能信息

采集系统的基本性能信息包括 CPU、内存、磁盘、网络等,可以完整描述当前系统的运行状态及质量。psutil模块已经封装了这些方法,用户可以根据自身的应用场景,调用相应的方法来满足需求,非常简单实用。

CPU信息
print("CPU完整信息:",psutil.cpu_times(percpu=True))

#更直观的看出核心数
for i in psutil.cpu_times(percpu=True):print(i)

  • 看用户进程CPU信息:
print('用户进程CPU信息:',psutil.cpu_times().user)

  • 逻辑核心数:线程 / 物理核心数:核心
print('逻辑核心数:',psutil.cpu_count())
print('物理核心数:',psutil.cpu_count(logical=False))

内存信息

Linux 系统的内存利用率信息涉及total(内存总数)、used(已使用的内存数)、free(空闲内存数)、bufers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)等,分别使用psutil.virtualmemory()与psutil.swapmemory()方法获取这些信息。

import psutil
mem = psutil.virtual_memory()
print('内存总容量:',mem.total)
print('内存已使用:',mem.used)
print('内存占用:',mem.percent)
print('剩余:',mem.free)
  • 虚拟内存:
#虚拟内存
print('虚拟内存:',psutil.swap_memory())

磁盘信息
#磁盘信息
print('磁盘完整信息:',psutil.disk_partitions())
#直观方式:
for i in psutil.disk_partitions():print(i)

  • 获取单个盘:
print('E盘信息:',psutil.disk_usage('e://'))

  • 磁盘读写信息:
print('磁盘读写信息:',psutil.disk_io_counters())

for i in psutil.disk_io_counters(perdisk=True).items():print(i)

  • 每块磁盘读写信息:counters内加上perdisk=True
print('每块磁盘读写信息:',psutil.disk_io_counters(perdisk=True))

网络信息

系统的网络信息与磁盘IO类似,涉及几个关键点,包括bytessent(发送字节数)、bytesrecv(接收字节数)、packetssent(发送数据包数)、packetsrecv(接收数据包数)等。这些网络信息使用psutil.netiocounters()方法获取。

  • 获取网络信息
print('总网络信息:',psutil.net_io_counters())

每块网卡的网络信息:

print('每块网卡网络信息:',psutil.net_io_counters(pernic=True))
#直观
for i in psutil.net_io_counters(pernic=True).items():print(i)

其他信息
  • 当前登录用户
print('当前登录用户:',psutil.users())

  • 系统开机时间
#引入包以转换时间格式
import datetime
print('系统开机时间:',psutil.boot_time())
print('系统开机时间格式:',datetime.datetime.fromtimestamp(psutil.boot_time()).strftime('%Y-%m-%d %H:%M:%S'))

进程信息

  • 列出所有进程的pid:
print('正在运行的进程ID:',psutil.pids())

  • 创建进程对象:
p = psutil.Process(1000)
print('进程名称:',p.name())
print('进程路径:',p.exe())

  • 进入工作目录绝对路径(一般只在Linux中使用,在Windows中仅支持额外安装的程序使用):
print('进程绝对路径:',p.cwd())
  • 查看进程状态 / 开启时间
import datetime
p = psutil.Process(1000)
print('进程名称:',p.name())
print('进程路径:',p.exe())
print('进程状态:',p.status())
print('进程开启时间:',datetime.datetime.fromtimestamp(p.create_time()).strftime('%Y-%m-%d %H:%M:%S'))

  • 进程UID信息和GID信息(Linux中使用)

  • 进程CPU时间:
p = psutil.Process(1000)
print('进程CPU时间:',p.cpu_times())

进程CPU亲和:

print('进程CPU亲和:',p.cpu_affinity)

  • 进程利用率:
print('进程内存占用:',p.memory_percent())
print('进程rss和vms使用:',p.memory_info())

  • 进程IO信息和开启的线程数
print('进程IO信息:',p.io_counters())
print('进程开启的线程数:',p.num_threads())

实用的IP地址处理模块IPy

IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的地址,包括网段、网络掩码、广播地址、子网数、P类型等。Python 提供了一个强大的第三方模块IPy模块可以很好地辅助我们高效完成IP的规划工作。

IP地址、网段的基本处理

IPy模块包含IP类,使用它可以方便处理绝大部分格式为IPv6及IPv4的网络和地址。

  • 获取版本号
from IPy import IP
#获取版本号
v1 = IP('192.168.128.128/32').version()
print(v1)v2 = IP('::1').version()
print(v2)

  • 获取网段地址
#获取网段地址
ip = IP('192.168.128.0/24')
print('地址数量:',ip.len())

  • IP地址类型
#IP地址类型
print(IP('192.168.128.1/32').iptype())
print(IP('114.114.114.114/32').iptype())
print(IP('255.255.255.255/32').iptype())
print(IP('127.0.0.1/32').iptype())

  • 反向解析地址格式
print(ip.reverseNames())
  • IP地址格式转换
#IP地址格式
print(IP('192.168.1.0').make_net('255.255.255.0'))
print(IP('192.168.1.0/255.255.255.0',make_net=True))
print(IP('192.168.1.0-192.168.1.255',make_net=True))

  • 也可以通过 strNormal方法指定不同 wantprefxlen参数值以定制不同输出类型的网段,输出类型为字符串。
print(IP('192.168.1.0/24').strNormal(0))
print(IP('192.168.1.0/24').strNormal(1))
print(IP('192.168.1.0/24').strNormal(2))
print(IP('192.168.1.0/24').strNormal(3))

多网络计算方法

  • IP地址比较
# IP地址比较
print(IP('192.168.1.0/24')>IP('10.0.0.8'))

  • 判断IP地址和网段是否包含于另一个网段中
print('192.168.2.128' in IP('192.168.1.0/24'))

  • 判断两个网段是否存在重叠,采用IPy提供的overlaps方法,1代表重叠,0代表不重叠
print(IP('192.168.0.0/23').overlaps('192.168.1.0/24'))
print(IP('192.168.1.0/24').overlaps('192.168.2.0/24'))

  • 根据输入的IP或子网返回网络、掩码、广播、反向解析、子网数、IP类型等信息。
#根据输入的IP或者子网给出对应的信息
ips = IP(input('请输入IP或者网段:'))
if len(ips)>1:print('此为网段')print('子网掩码:',ips.netmask())print('网络号:',ips.net())print('广播地址:',ips.broadcast())print('地址数量:',len(ips))
else:print('此为IP地址')print('地址类型:',ips.iptype())print('反向解析地址:',ips.reverseNames())print('整数表示:',ips.int())print('二进制表示:',ips.strBin())print('十六进制表示:',ips.strHex())

系统批量运维管理器paramiko

paramiko 是基于Python 实现的SSH2远程安全连接,支持认证及密钥方式。可以实现远程命令执行、文件传输、中间 SSH代理等功能,相对于Pexpect,封装的层次更高,更贴近SSH协议的功能。

paramiko 的安装

Linux系统部署Python环境
1.安装环境
yum install -y openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel libffi-devel gcc gcc-c++
2.解压

将python3的linux压缩包移至linux内解压

tar zxvf Python-3.13.2.tgz

解压完进入python3.13.2目录

cd Python-3.13.2/

输入

./configure --prefix=/usr/local/python3
3.编译
make && make install
4.创建软目录
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip

之后可以检查一下是否安装完成

python3 --version
5.pip国内镜像源配置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/vim /root/.config/pip/pip.conf

文件内输入:

[global]
timeout=40
index-url=http://mirrors.aliyun.com/pypi/simple/
extra-index-url=https://pypi.tuna.tsinghua.edu.cn/simple/http://pypi.douban.com/simple/http://pypi.mirrors.ustc.edu.cn/simple/
[install]
trusted-host=pypi.tuna.tsinghua.edu.cnmirrors.aliyun.compypi.douban.compypi.mirrors.ustc.edu.cn
6.pip安装psutil
pip install psutil

paramiko 的核心组件

paramiko模块包含两个核心组件,一个为SSHClient类,另一个为SFTPClient类。

SSHClient 类

SSHClient类是SSH服务会话的高级表示,该类封装了传输(transport)、通道(channel)及SFTPClient的校验、建立的方法,通常用于执行远程命令。

1.connect 方法

connect方法实现了远程SSH连接并校验。

下面四个比较重要:

hostname(str类型),连接的目标主机地址; 
port(int类型),连接目标主机的端口,默认为22; 
username(str类型),校验的用户名(默认为当前的本地用户名); 
password(str类型),密码用于身份校验或解锁私钥; 

其余:

pkey(PKey类型),私钥方式用于身份验证;
key_filename(str or list(str)类型),一个文件名或文件名的列表,用于私钥的身份验证:
timeout(foat类型),一个可选的超时时间(以秒为单位)的TCP连接;
allow_agent(bool类型),设置为False 时用于禁用连接到 SSH 代理;
look_for_keys(bool类型),设置为 False 时用来禁用在~/.ssh 中搜索私钥文件;
compress(bool类型),设置为 True 时打开压缩。

2.exec_command 方法

远程命令执行方法,该命令的输入与输出流为标准输人(stdin)、输出(stdout)、错误(stderr)的 Python文件对象。

exec_command(self, command, bufsize=-1)

说明:

command(str类型),执行的命令串;
bufsize(int类型),文件缓冲区大小,默认为-1(不限制)。

3.setmissinghostkeypolicy方法

设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种,别是AutoAddPolicy、RejectPolicy(默认)、WarningPolicy,仅限用于SSHClient类。

ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

说明:

AutoAddPolicy,自动添加主机名及主机密钥到本地HostKeys对象,并将其保存;
RejectPolicy,自动拒绝未知的主机名和密钥;
WarningPolicy,用于记录一个未知的主机密钥的Python警告,并接受它,功能上与AutoAddPolicy相
似,但未知主机会有告警。

案例:创建ssh客户端远程指令free -m 获取内存状态信息

import paramiko
#目标主机IP
hosts = '192.168.112.122'
#端口
port= 22
#用户名
user = 'root'
#密码
pwd = '123123'#上面的内容需要改为自己的#生成日志文件和py源码在同一个目录
paramiko.util.log_to_file('system.log')
#创建一个ssh客户端
ssh_client = paramiko.SSHClient()
#定义连接策略,允许未知主机访问
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
ssh_client.connect(hostname=hosts,port=port,username=user,password=pwd,allow_agent=False)
#远程执行命令
stdin,stdout,stderr = ssh_client.exec_command('free -m')
#解析输出
for line in stdout:print(line)
#关闭资源
stdin.close()
#关闭客户端
ssh_client.close()

日志的输出:

SFTPClinent类

SFTPClient作为一个 SFTP 客户端对象,根据SSH传输协议的sftp 会话,实现远程文件操作,比如文件上传、下载、权限、状态等操作。

  • from_transport方法

创建一个已连同的SFTP客户端通道

from_transport(cls,t)
  • put方法

上传本地文件到远程SFTP服务端

put(self,localpath,remotepath,callback=None,confirm=True)

说明

主要:

localpath(str类型),需上传的本地文件(源); 
remotepath(str类型),远程路径(目标); 

其他:

callback(function(int,int)),获取已接收的字节数及总传输字节数,以便回调函数调用默认为 None;
confirm(bool类型),文件上传完毕后是否调用stat()方法,以便确认文件的大小。
  • get方法

从远程SFTP服务端下载文件到本地

get(self,remotepath,localpath,callback=None)

说明

主要:

remotepath(str 类型),需下载的远程文件(源); 
localpath(str 类型),本地路径(目标);

其他:

callback(function(int,int)),获取已接收的字节数及总传输字节数,以便回调函数调用,默认为None。
  • 其他方法
mkdir,在SFTP 服务器端创建目录,如 sftp.mkdir("/home/userdir",0755)。
remove,删除SFTP服务器端指定目录,如sftp.remove("/home/userdir")。
rename,重命名SFTP服务器端文件或目录,如sfp.rename("/home/test.sh","/home/testfile.sh")。
stat,获取远程 SFTP服务器端指定文件信息,如sfp.stat("/home/testflie.sh")。
listdir,获取远程 SFTP服务器端指定目录列表,以Python的列表(List)形式返回,如sftp.listdir("/home")。

案例:实现了文件上传、下载、创建与删除目录等,需要注意的是,put和 get方法需要指定文件名,不能省略。

import paramikousername = 'root'
password = '145823'
hostname = '192.168.112.129'
port = 22try:#建立SSH传输连接# Transport 创建一个 SSH 传输通道,连接到 hostname:portt = paramiko.Transport((hostname,port))t.connect()#使用用户名和密码进行身份验证t.connect(username=username,password=password)#创建 SFTP 客户端#从传输通道 t 创建一个 SFTP 客户端 sftp,用于文件操作。sftp = paramiko.SFTPClient.from_transport(t)#上传文件,我们这里就是用之前生成的system.log日志文件sftp.put('system.log','/root/system.log')#下载文件(需提前在linux中准备这个test1.txt文件或选择linux中的其他文件)sftp.get('/root/test1.txt','D:\\PycharmProject\\code\\test1.txt')#在/root目录中创建usrdirsftp.mkdir('usrdir')sftp.mkdir('usrdir2')#重命名usrdir为testdirsftp.rename('usrdir','testdir')#删除usrdir2sftp.rmdir('usrdir2')#读取test1.txt属性信息print(sftp.stat('test1.txt'))#查看/root目录下的文件列表print(sftp.listdir('./'))t.close()
except Exception as err:print(err)

我们可以在Xftp中直观的看到执行的结果:

执行前:

执行后:


THE END

如有遗漏,欢迎补充,感谢 !


http://www.hkcw.cn/article/uWIqQwldkq.shtml

相关文章

声光控灯电路Multisim仿真

5V交流源充当声音信号源,可调电阻充当光敏电阻。 白天,不管是否有声音,灯都不会亮。 夜晚,当有声音时,灯亮一段时间,然后熄灭。 仿真时遇到的问题: 问题1、必须按照一定的流程才能正常运行。…

Blueprints - List View Widget

一些学习笔记归档; 需要读取动态数据把多个条目显示在UI上的时候,可能用到List View组件;假如有Widget要使用在List View中,此Widget需要继承相关接口: 这样就能在List View控件中选择已经继承接口的Widget组件了&…

七.MySQL内置函数

1.日期函数 MySQL 日期与时间函数对照表 函数名称描述current_date()当前日期(格式:YYYY-MM-DD)current_time()当前时间(格式:HH:MM:SS)current_timestamp()当前日期和时间(等同于 now()&#x…

神经网络与Transformer详解

1. 一个模型的典型场景 对用户咨询的法律问题做自动归类: 婚姻纠纷、劳动纠纷、合同纠纷、债权债务、房产纠纷、交通事故、医疗纠纷、版权纠纷 2. 模型就是一个数学公式 我们一般将这样的问题描述为:给定一组输入数据,经过一系列数学公式计算后,输出n个概率,分别代表该…

《Python基础》第2期:环境搭建

在开始编写 Python 代码前,还需要搭建 Python 的开发环境。 电脑是没办法直接读懂 Python 代码的,而是需要一个解释器,实时把代码翻译成字节码,字节码再转换成 0 和 1,电脑就能读懂了。 Python 的运行过程就是翻译一行…

多线程——定时任务ScheduledThreadPoolExecutor用法

创建 同样是用Executors工具类: 创建定时任务线程池 还有一个重载方法 接收一个额外的参数:线程工厂 创建单个定时任务执行器: 重载:也接收一个线程工厂 区别说明 singleThread: 这里可以new, 说明他是一个类 传…

AI 代理框架:使用正确的工具构建更智能的系统

AI 代理框架:使用正确的工具构建更智能的系统 探索 AI 代理框架如何支持从单代理设置到复杂的多代理编排的自主工作流。了解它们有何不同、何时使用它们以及如何开始使用实际工具。 AI 代理框架 从本质上讲,AI 代理是可以感知、计划和行动的程序。它们旨…

计算机网络 TCP篇常见面试题总结

目录 TCP 的三次握手与四次挥手详解 1. 三次握手(Three-Way Handshake) 2. 四次挥手(Four-Way Handshake) TCP 为什么可靠? 1. 序列号与确认应答(ACK) 2. 超时重传(Retransmis…

系统架构设计师(一):计算机系统基础知识

系统架构设计师(一):计算机系统基础知识 引言计算机系统概述计算机硬件处理器处理器指令集常见处理器 存储器总线总线性能指标总线分类按照总线在计算机中所处的位置划分按照连接方式分类按照功能分类 接口接口分类 计算机软件文件系统文件类…

软件无线电关键技术之正交调制技术

与传统调制方式相比,IQ 调制不直接对相位或频率调制,而是简单的对载波及其正交量进行线性调制,进而达到相位或频率调制的效果。IQ 调制具有较高的数据传输速率,高频带利用率,可有效抑制镜频边带以及易于实现等优势&…

comfyui利用 SkyReels-V2直接生成长视频本地部署问题总结 1

在通过桌面版comfyUI 安装ComfyUI-WanVideoWrapper 进行SkyReels-V2 生成长视频的过程中,出现了,很多错误。 总结一下,让大家少走点弯路 下面是基于搜索结果的 ComfyUI 本地部署 SkyReels-V2 实现长视频生成的完整指南,涵盖环境配…

性能优化 - 案例篇:缓存

文章目录 Pre引言1. 缓存基本概念2. Guava 的 LoadingCache2.1 引入依赖与初始化2.2 手动 put 与自动加载(CacheLoader)2.2.1 示例代码 2.3 缓存移除与监听(invalidate removalListener) 3. 缓存回收策略3.1 基于容量的回收&…

高速串行通信解惑说明

什么是逗号检测? 逗号检测,就是gt在发送数据的时候,一直在发送。这个时候使用一个标识符将数据隔开,用来对齐数据。(类似人说明的停顿或者写文章中的标点符号)逗号的两个作用,一个是将数据包隔…

724.寻找数组的中心下标前缀和

题目链接&#xff1a; https://leetcode.cn/problems/find-pivot-index/ 这道题目我们可以使用暴力解法&#xff0c;就一个下标前数组之和&#xff0c;再求一个下标后数组之和&#xff0c;时间复杂度达到n方&#xff0c;我们来写一下&#xff1a; int pivotIndex(vector<in…

Python----目标检测(《SSD: Single Shot MultiBox Detector》论文和SSD的原理与网络结构)

一、SSD&#xff1a;单次多框检测器 1.1、基本信息 标题&#xff1a;SSD: Single Shot MultiBox Detector 作者&#xff1a;Wei Liu (UNC Chapel Hill), Dragomir Anguelov (Zoox Inc.), Dumitru Erhan, Christian Szegedy (Google Inc.), Scott Reed (University of Michiga…

[Windows]在Win上安装bash和zsh - 一个脚本搞定

目录 前言安装步骤配置要求下载安装脚本启动程序 前言 Windows是一个很流行的系统, 但是在Windows上安装bash和zsh一直是一个让人头疼的问题. 本蛙特意打包了一个程序, 用于一站式解决这一类的问题. 安装步骤 配置要求 系统: Windows软件: Powershell 5.1或以上 下载安装…

从0开始学习R语言--Day13--混合效应与生存分析

混合效应模型&#xff08;Mixed Effects Model&#xff09; 对于数据来说&#xff0c;我们通常把所有样本共有的影响因素&#xff08;性别&#xff0c;实验处理&#xff0c;实验方法&#xff09;&#xff0c;这种可以推广到总体的叫做固有效应&#xff0c;而仅适用于特定分组的…

【前端】javascript和Vue面试八股

面试暂时没有遇到过考这么深的&#xff0c;一般还是问一些生命周期和性能相关。 Q&#xff1a;什么情况下“ a 1 && a 2 && a 3 ”同时成立 A&#xff1a;对象的valueOf与toString方法&#xff1a;当一个对象与一个原始值&#xff08;如数字&#xff09;进…

某航后缀混淆逆向与顶像风控分析

文章目录 1. 写在前面2. 接口分析3. 加密分析4. 风控分析 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致…

【PostgreSQL 05】PostgreSQL扩展开发实战:从自定义函数到插件开发的完整指南

PostgreSQL扩展开发实战&#xff1a;从自定义函数到插件开发的完整指南 关键词&#xff1a; PostgreSQL扩展开发、自定义函数、插件开发、C语言扩展、SQL函数、存储过程、数据库扩展、PostgreSQL插件、PGXS、CREATE EXTENSION 摘要&#xff1a; 想让PostgreSQL拥有独特的超能力…