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

news2025/6/4 6:58:39

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

目录

系统性能信息模块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.cn
        mirrors.aliyun.com
        pypi.douban.com
        pypi.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 paramiko

username = 'root'
password = '145823'
hostname = '192.168.112.129'
port = 22

try:
    #建立SSH传输连接
    # Transport 创建一个 SSH 传输通道,连接到 hostname:port
    t = 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目录中创建usrdir
    sftp.mkdir('usrdir')
    sftp.mkdir('usrdir2')
    #重命名usrdir为testdir
    sftp.rename('usrdir','testdir')
    #删除usrdir2
    sftp.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.coloradmin.cn/o/2396076.html

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

相关文章

Linux 简单模拟实现C语言文件流

🌇前言 在 C语言 的文件流中,存在一个 FILE 结构体类型,其中包含了文件的诸多读写信息以及重要的文件描述符 fd,在此类型之上,诞生了 C语言 文件相关操作,如 fopen、fclose、fwrite 等,这些函数…

小程序使用npm包的方法

有用的链接 npm init -y 这个命令很重要, 会初始化 package.json 再重新打开微信小程序开发工具 选择工具中npm构建 在程序中引用时在main.js中直接使用包名的方式引用即可 如安装的是generator包,npm构建后就会生成 const myPackage require(***-generato…

Rust 学习笔记:发布一个 crate 到 crates.io

Rust 学习笔记:发布一个 crate 到 crates.io Rust 学习笔记:发布一个 crate 到 crates.io提供有用的文档注释常用标题文档注释作为测试注释所包含的项目 使用 pub use 导出一个方便的公共 API设置 crates.io 账户添加 metadata 到一个新的 crate发布到 c…

Vert.x学习笔记-EventLoop与Context的关系

Vert.x学习笔记 1. EventLoop 的核心作用2. Context 的核心作用3. EventLoop 与 Context 的关系1. 事件循环(EventLoop)的核心职责2. 上下文(Context)的核心职责3. 事件循环与上下文的关系(1)一对一绑定&am…

2025030给荣品PRO-RK3566开发板单独升级Android13的boot.img

./build.sh init ./build.sh -K ./build.sh kernel 【导入配置文件】 Z:\Android13.0\rockdev\Image-rk3566_t\config.cfg 【更新的内核】 Z:\Android13.0\rockdev\Image-rk3566_t\boot.img 【导入分区表,使用原始的config.cfg会出错的^_】 Z:\Android13.0\rockdev\…

由enctype-引出post与get的关系,最后深究至请求/响应报文

本篇载自我的笔记,本次为第二次复习。我觉得我有能力理一下思路了。 --- 笔记截图。 enctype HTML 表单的 enctype(Encode Type,编码类型)属性用于控制表单数据在提交到服务器时的编码方式,不同取值的详细解析如下&a…

搭建基于VsCode的ESP32的开发环境教程

一、VsCode搜索ESP-IDF插件 根据插件处搜索找到ESP-IDF并安装 安装完成 二、配置安装ESP-IDF 配置IDF 按照如下配置,点击安装 安装完成 三、使用案例程序 创建一个闪光灯的例子程序,演示程序编译下载。 选择blink例子,闪烁LED的程序 选…

【MFC】初识MFC

目录 01 模态和非模态对话框 02 静态文本 static text 01 模态和非模态对话框 首先我们需要知道模态对话框和非模态对话框的区别: 模态对话框是一种阻塞时对话框,它会阻止用户与应用程序的其他部分进行交互,直到用户与该对话框进行交互并关…

如何通过数据分析优化项目决策

通过数据分析优化项目决策需从明确数据分析目标、选择适当的数据分析工具、确保数据质量、建立数据驱动文化等方面入手,其中,明确数据分析目标是优化决策过程的基础,只有清晰明确的数据分析目标才能指导有效的数据采集与分析,避免…

2024年数维杯国际大学生数学建模挑战赛B题空间变量协同估计方法研究解题全过程论文及程序

2024年数维杯国际大学生数学建模挑战赛 B题 空间变量协同估计方法研究 原题再现: 在数理统计学中,简单采样通常假设来自相同总体的采样点彼此独立。与数理统计相反,空间统计假设空间变量的采样点是相依的,并在其值中表现出某些趋…

leetcode hot100刷题日记——34.将有序数组转换为二叉搜索树

First Blood:什么是平衡二叉搜索树? 二叉搜索树(BST)的性质 左小右大:每个节点的左子树中所有节点的值都小于该节点的值,右子树中所有节点的值都大于该节点的值。 子树也是BST:左子树和右子树也…

网页自动化部署(webhook方法)

实现步骤: 宝塔安装宝塔WebHook 2.5插件。 github 上配置网页仓库(或可在服务器的网页根目录clone)。 配置宝塔WebHook 2.5 添加hook脚本; 编辑添加syncJC脚本; #!/bin/bash # 定义网站根目录 WEBROOT"/www…

AU6825集成音频DSP的2x32W数字型ClaSSD音频功率放大器(替代TAS5825)

1.特性 ● 输出配置 - 立体声 2.0: 2 x 32W (8Ω,24V,THD N 10%) - 立体声 2.0: 2 x 26W (8Ω,21V,THD N 1%) ● 供电电压范围 - PVDD:4.5V -26.4V - DVDD: 1.8V 或者 3.3V ● 静态功耗 - 37mA at PVDD12V ● 音频性能指标 - THDN ≤ 0.02% at 1W,1kHz - SNR ≥ 107dB (A-wei…

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1商用服务体验全流程

华为云 Flexus 与 DeepSeek-V3/R1 的深度整合,构建了一套 “弹性算力 智能引擎” 的协同体系。 Flexus 系列云服务器基于柔性计算技术,通过动态资源调度(如 Flexus X 实例)实现 CPU / 内存的实时弹性分配,尤其适合大模…

C# NX二次开发-查找连续倒圆角面

在QQ群里有人问怎么通过一个选择一个倒圆角面来自动选中一组倒圆角面。 可以通过ufun函数 UF_MODL_ask_face_type 和 UF_MODL_ask_face_props 可判断处理选择相应的一组圆角面。 代码: Tag[] 查找连续倒圆角面(Tag faceTag) {theUf.Modl.AskFaceType(faceTag, out int typ…

今天遇到的bug

先呈现一下BUG现象。 这主要是一个传参问题,参数一直传不过去。后来我才发现,问题所在。 我们这里用的RquestBody接收参数,所有请求的参数需要用在body体中接收,但是我们用postman,用的是字符串查询方式传参&#x…

长安链智能合约命令解析(全集)

创建命令解析 ./cmc client contract user create \ --contract-namefact \ --runtime-typeWASMER \ --byte-code-path./testdata/claim-wasm-demo/rust-fact-2.0.0.wasm \ --version1.0 \ --sdk-conf-path./testdata/sdk_config.yml \ --admin-key-file-paths./testdata/cryp…

一、OpenCV的基本操作

目录 1、OpenCV的模块 2、OpenCV的基础操作 2.1图像的IO操作 2.2绘制几何图形 2.3获取并修改图像中的像素点 2.4 获取图像的属性 2.5图像通道的拆分与合并 2.6色彩空间的改变 3、OpenCV的算数操作 3.1图像的加法 3.2图像的混合 3.3总结 1、OpenCV的模块 2、OpenCV的基…

裂缝仪在线监测装置:工程安全领域的“实时守卫者”

在基础设施运维领域,裂缝扩展是威胁建筑结构安全的核心隐患之一。传统人工巡检方式存在效率低、时效性差、数据主观性强等局限,而裂缝仪在线监测装置通过技术迭代,实现了对结构裂缝的自动化、持续性追踪,为工程安全评估提供科学依…

【论文精读】2024 ECCV--MGLD-VSR现实世界视频超分辨率(RealWorld VSR)

文章目录 一、摘要二、问题三、Method3.1 Latent Diffusion Model3.2 Motion-guided Diffusion Sampling3.3 Temporal-aware Decoder Fine-tuning 四、实验设置4.1 训练阶段4.2 训练数据 贡献总结 论文全称: Motion-Guided Latent Diffusion for Temporally Consis…