ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Python 运维自动化:psutil+IPy 系统与网络信息采集深度实战

Python 运维自动化:psutil+IPy 系统与网络信息采集深度实战 Python 运维 —— 系统信息模块作用采集服务器 CPU、内存、磁盘、网络、进程、IP 网段信息用于监控、巡检、自动化运维。 包含三大模块psutil系统资源采集、IPyIP 网段处理、subprocess.Popen调用系统命令一、psutil 模块跨平台系统资源采集1. 简介psutil 是第三方跨平台库用来获取系统利用率、进程信息等价于 Linux 命令top、free、df、ps、iostat等工具的能力。 安装pip install psutil2. CPU 信息表格方法说明psutil.cpu_times()获取 CPU 各项时间统计user、system、idle、iowait 等psutil.cpu_times(percpuTrue)获取每个逻辑 CPU 的详细时间psutil.cpu_count()CPU 逻辑核数包含超线程psutil.cpu_count(logicalFalse)CPU 物理核数示例代码importpsutil cpu_infopsutil.cpu_times(percpuTrue)print(cpu_info)print(user CPU时间,psutil.cpu_times().user)print(逻辑核,psutil.cpu_count())print(物理核,psutil.cpu_count(logicalFalse))3. 内存信息psutil.virtual_memory()物理内存信息返回对象包含total、used、free、available、percentpsutil.swap_memory()swap 交换分区信息importpsutil mempsutil.virtual_memory()print(内存总大小,mem.total)print(空闲内存,mem.free)print(swap信息,psutil.swap_memory())单位返回数值单位是字节 Byte需要手动除以 1024 转 KB、MB。4. 磁盘信息表格方法作用psutil.disk_partitions()获取磁盘分区列表psutil.disk_usage(/)获取某个分区使用率psutil.disk_io_counters()磁盘整体 IO 统计psutil.disk_io_counters(perdiskTrue)每块磁盘单独 IO 统计importpsutilprint(psutil.disk_partitions())print(psutil.disk_usage(/))print(psutil.disk_io_counters())5. 网络 IO 信息表格方法说明psutil.net_io_counters()整机全部网卡收发流量包、字节数psutil.net_io_counters(pernicTrue)每个网卡单独流量统计返回字段bytes_sent发送字节、bytes_recv接收字节、packets_sent发送包、packets_recv接收包。6. 其他系统基础信息importpsutil,datetime psutil.users()# 当前登录系统用户列表psutil.boot_time()# 开机时间戳1970‑01‑01开始的秒数# 时间戳转可读时间datetime.datetime.fromtimestamp(psutil.boot_time()).strftime(%Y-%m-%d %H:%M:%S)7. 进程管理psutil.pids()获取全部进程 PID 列表psutil.Process(pid)实例化单个进程对象获取进程各项信息Process 对象常用方法ppsutil.Process(2000)p.name()#进程名p.exe()#程序二进制路径p.cwd()#工作目录p.status()#进程状态p.create_time()#进程创建时间戳p.uids()#UID信息Linuxp.gids()#GID信息Linuxp.cpu_times()#进程CPU占用时间p.memory_percent()#进程内存占比p.memory_info()#rss、vms内存详情p.io_counters()#进程IO读写统计p.num_threads()#线程数量8.subprocess.Popen 调用系统命令Popen 是底层创建子进程类用来执行 shell 命令获取输出和错误信息。stdoutsubprocess.PIPE捕获标准输出stderrsubprocess.PIPE捕获错误输出.communicate()等待命令执行完成返回(输出字节,错误字节)返回是 bytes需要.decode(utf‑8)转字符串。示例importsubprocess processsubprocess.Popen([ls,-l],stdoutsubprocess.PIPE,stderrsubprocess.PIPE)output,errorprocess.communicate()ifoutput:print(output.decode(utf‑8))iferror:print(error.decode(utf‑8))注意命令建议写成列表[ls,‑l]不推荐字符串 shellTrue存在安全风险。二、IPy 模块IP 地址网段处理第三方模块用于 IP 规划处理 IPv4/IPv6 网段、掩码、IP 区间计算。 安装pip install IPy导入from IPy import IP1. 基础用法ipIP(192.168.1.0/24)ip.version()#4代表IPv46代表IPv6ip.len()#网段内IP总数量forxinip:#遍历网段所有IPprint(x)2.IP 常用转换方法ipIP(192.168.1.20)ip.reverseNames()#反向解析域名ip.iptype()#PRIVATE私网 / PUBLIC公网ip.int()#转整数ip.strHex()#十六进制ip.strBin()#二进制IP(0x8080808)#十六进制转回IP3.make_netTrue 重点踩坑点作用把 IP / 掩码、IP 范围强制转为标准网段对象。⚠️重要限制如果传入起始IP‑结束IP的范围必须刚好是完整子网边界总 IP 数量是 2 的 n 次方否则抛异常not on a network boundary。#✅合法刚好/24完整网段 IP(192.168.1.0‑192.168.1.255,make_netTrue) #❌报错0‑192一共193个IP不是2的幂次 IP(192.168.1.0‑192.168.1.192,make_netTrue)4.strNormal () 格式化输出网段IP(192.168.1.0/24).strNormal(wantprefixlen?)表格参数值输出格式0192.168.1.0仅网络地址1192.168.1.0/24前缀2192.168.1.0/255.255.255.0点分掩码3192.168.1.0‑192.168.1.255起止 IP5. 网段关系运算判断 IP 是否属于网段192.168.1.100 in IP(192.168.1.0/24)网段大小比较IP(10.0.0.0/24) IP(12.0.0.0/24)判断网段是否重叠.overlaps()返回 1 重叠0 不重叠IP(192.168.0.0/23).overlaps(192.168.1.0/24)#返回1重叠IP(192.168.1.0/24).overlaps(192.168.2.0/24)#返回0不重叠6. 综合小案例输入 IP / 网段输出网络信息addressinput(请输入ip地址: )ipIP(address)iflen(ip)1:print(网络号为,ip.net())print(子网掩码为,ip.netmask())print(广播地址为,ip.broadcast())print(反向解析地址,ip.reverseNames()[0])print(网络子网数,len(ip))else:print(反向解析ip地址为,ip.reverseNames()[0])print(十六进制地址,ip.strHex())print(二进制地址,ip.strBin())print(地址类型为,ip.iptype())
返回列表