01 psutils模块运用

python3.6.7安装脚本

baim0手撸版

#!/bin/bash
cd /opt
yum update -y
yum -y groupinstall "Development tools" 
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel -y

wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz

tar -xf Python-3.6.7.tar.xz

cd /opt/Python-3.6.7

./configure --prefix=/usr/local/python3

make && make install

ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3.6.7
ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3.6.7

rm -rf /opt/Python-3.6.7
rm -rf /opt/Python-3.6.7.tar.xz

psutil模块

模块简介

是一个跨平台库,主要获取进程信息、系统利用率信息

pip3.6.7 install psutil

模块使用

# 导包
import psutil

# 使用包的功能
psutil.virtual_memory()
# 获取内存所有的信息
[root@docker ~]# python3.6.7 
Python 3.6.7 (default, Jul  6 2021, 09:37:13) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psutil
>>> psutil.virtual_memory()
svmem(total=1927176192, available=1161650176, percent=39.7, used=526856192, free=140374016, active=957849600, inactive=559788032, buffers=58167296, cached=1201778688, shared=37826560, slab=150802432)

cpu信息

通过psutil获取cpu相关的信息

操作方式

# 基本信息
cpu_times()

# cpu核信息
cpu_count()

# 我们可以为该方法添加 percpu=True获取逻辑cpu信息

简单实践

import psutil

cpu_info = psutil.cpu_times()
print("cpu基本信息:{}".format(cpu_info))

cpu_user = cpu_info.user
print("cpu的用户进程占比:{}".format(cpu_user))

cpu_system = cpu_info.system
print("cpu的系统进程占比:{}".format(cpu_system))

cpu_iowait = cpu_info.iowait
print("cpu的io进程占比:{}".format(cpu_iowait))

cpu_count = psutil.cpu_count()
print("cpu的核信息:{}".format(cpu_count))

cpu_count = psutil.cpu_count(logical=True)
print("cpu的核逻辑信息:{}".format(cpu_count))

cpu_users = psutil.users()
print("cpu的所有用户信息:{}".format(cpu_users))
[root@docker ~]# python3.6.7 psutil1.py 
cpu基本信息:scputimes(user=9982.61, nice=7.97, system=8496.4, idle=1141936.04, iowait=1161.41, irq=0.0, softirq=115.24, steal=0.0, guest=0.0, guest_nice=0.0)
cpu的用户进程占比:9982.61
cpu的系统进程占比:8496.4
cpu的io进程占比:1161.41

内存信息

通过psutil获取内存相关的信息数据

实践

import psutil

# 获取全部内存信息
mem_info = psutil.virtual_memory()
print("内存的基本信息:{}".format(mem_info))

# 获取部分内存信息
mem_total = mem_info.total
print("内存的总量:{}".format(mem_total))

mem_used = mem_info.used
print("内存已使用:{}".format(mem_used))

mem_free = mem_info.free
print("内存总量:{}".format(mem_free))

mem_buffer = mem_info.buffers
print("内存总量:{}".format(mem_buffer))

mem_swap = psutil.swap_memory()
print("内存的交换信息:{}".format(mem_swap))
[root@docker ~]# python3.6.7 mem.py 
内存的基本信息:svmem(total=1927176192, available=1159606272, percent=39.8, used=528900096, free=267259904, active=808960000, inactive=581611520, buffers=65433600, cached=1065582592, shared=37826560, slab=150192128)
内存的总量:1927176192
内存已使用:528900096
内存总量:267259904
内存总量:65433600
内存的交换信息:sswap(total=0, used=0, free=0, percent=0.0, sin=0, sout=0)

磁盘信息

简单实践

import psutil

disk_info = psutil.disk_partitions()
print("所有的分区详情:{}".format(disk_info))

# 挂载点信息获取/为例
disk_root = psutil.disk_usage("/")
print("根分区详情:{}".format(disk_root))

# 获取根分区的部分信息
root_total = disk_root.total
print("根分区挂载内容详情:{}".format(root_total))

root_free = disk_root.free
print("根分区空余:{}".format(root_free))

root_used = disk_root.used
print("根分区使用:{}".format(root_used))

root_percent = disk_root.percent
print("根分区使用占比:{}%".format(root_percent))

# 磁盘io操作相关信息
disk_io_info = psutil.disk_io_counters()
print("磁盘io信息:{}%".format(disk_io_info))

# 所有的
disk_io_info = psutil.disk_io_counters(perdisk=True)
print("磁盘io信息:{}%".format(disk_io_info))

# 磁盘io操作相关信息
psutil.disk_io_counters()

网络信息

获取网络相关的基本数据

使用方式

import psutil

# 获取所有信息
net_info = psutil.net_io_counters()
print("网卡所有的数据信息:{}".format(net_info))

# 获取部分信息
# 接收的数据信息
net_recv = net_info.bytes_recv
print("网卡接收的数据信息:{}".format(net_recv))

# 发送的数据信息
net_sent = net_info.bytes_sent
print("网卡接收的数据信息:{}".format(net_sent))

# 网卡的地址信息
net_addr = psutil.net_if_addrs()
print("网卡的地址信息:{}".format(net_addr))

# 网卡的状态信息
net_stats = psutil.net_if_stats()
print("网卡的状态信息:{}".format(net_stats))

# 网卡的连接信息
net_conn = psutil.net_connections()
print("网卡的连接信息:{}".format(net_conn))

其他信息

获取连接的用户信息,获取启动时间

实践

import psutil
import datetime
# 获取连接的用户信息
user_info=psutil.users()
print("连接的用户信息:{}".format(user_info))

# 获取启动时间
date_time = psutil.boot_time()
date_time = datetime.datetime.fromtimestamp(date_time).strftime("%F %T")
print("系统启动的时间信息:{}".format(date_time))
[root@python python]# python3.6.7 other.py 
连接的用户信息:[suser(name='root', terminal='pts/0', host='139.226.81.70', started=1625618176.0, pid=1541)]
系统启动的时间信息:2021-07-07 08:35:27

进程信息

获得当前系统的进程信息,可以让运维人员得知应用程序的运行状态,包括进程的启动时间,查看或者设置CPU亲和度,内存使用率,io信息,socket连接,线程数,资源利用情况,为开发人员的代码优化问题定位提供很好的数据参考

import psutil

# 获取进程相关的信息
process_id_list=psutil.pids()
print("当前系统所有运行的进程号:{}".format(process_id_list))

# 判断指定的pid是否存在
pid_num=786
result = psutil.pid_exists(pid_num)
print("{}进程状态是否运行{}".format(pid_num,result))

# 获取指定进程的相关信息
pid_info=psutil.Process(pid_num)
print("%s进程的详细信息为:%s"%(pid_info.name(),pid_info))

# 进程详细信息的获取方法
pid_name=pid_info.name()
print("{} 的进程名称为: {}".format(pid_num,pid_name))

pid_exe=pid_info.exe()
print("{} 的执行命令为: {}".format(pid_num,pid_exe))

pid_cwd=pid_info.cwd()
print("{} 的进程工作目录为: {}".format(pid_num,pid_cwd))

pid_status=pid_info.status()
print("{} 的进程工作状态为: {}".format(pid_num,pid_status))

popen类的使用

psutil提供的popen类的作用是获取用户启动的应用进程的相关状态

基础语法

psutil.Popen(['执行命令','参数','内容'],stdout=信息接收器)

属性
exec
shell

实践

import psutil
from subprocess import PIPE

# 指定用户执行程序
my_process=psutil.Popen(["python3.6.7","-c",'print("hello world")'],stdout=PIPE)
# 用户程序的信息获取
print("用户进程的名称:{}".format(my_process.name()))
print("用户进程的启动用户:{}".format(my_process.username()))
print("用户进程的输出信息:{}".format(my_process.communicate()))
[root@python python]# python3.6.7 process.py 
用户进程的名称:python3.6.7
用户进程的启动用户:root
用户进程的输出信息:(b'hello world\n', None)
posted @ 2021-07-07 09:21  BaiM0  阅读(127)  评论(0编辑  收藏  举报