python模块--psutil: 跨平台的设备监控模块(CPU, 内存, 硬盘,网络,传感器(温度、风扇、电池))

一、概要:

psutil(进程和系统实用程序)是一个跨平台库,用于 在Python中检索有关正在运行的进程系统利用率(CPU,内存,磁盘,网络,传感器)的信息。它主要用于系统监视分析和限制流程资源以及运行流程的管理。它实现了UNIX命令行工具提供的许多功能,例如:ps,top,lsof,netstat,ifconfig,who,df,kill,free,nice,ionice,iostat,iotop,uptime,pidof,tty,taskset,pmap。psutil目前支持以下平台:

  • linux;
  • windows;
  • mac os
  • FreeBSD, OpenBCD, NetBsd;
  • AIX;

  • 支持32位和64位的架构;
    支持python>=2.6; python>=3.4

二、安装:

github: https://github.com/giampaolo/psutil
pypi: https://pypi.org/project/psutil/
使用pip包管理利器直接安装:

pip install psutil

在这里插入图片描述

三、具体实例

1. CPU:

# coding=utf-8
import psutil

# 去获取cpu的详细信息
cpus = psutil.cpu_times()
print("CPU的详细信息:{}".format(cpus))


# psutil获取系统cpu使用率的方法是cpu_percent()
# 两个参数,分别是interval和percpu,
# interval指定的是计算cpu使用率的时间间隔,
# percpu则指定是选择总的使用率还是每个cpu的使用率。(默认为False)
percent = psutil.cpu_percent(interval=1)
print(f"当前CPU总使用率为:{percent}%")

percent = psutil.cpu_percent(interval=1, percpu=True)
print(f"当前每个CPU使用率为:{percent}")

# cpu详细使用率
times_percent = psutil.cpu_times_percent(interval=1, percpu=False)
print(f"当前CPU总详细使用率为:{times_percent}%")


# cpu核数
logical_count = psutil.cpu_count()
print(f"CPU逻辑核数:{logical_count}")

cpu_count = psutil.cpu_count(logical=False)
print(f"CPU物理核数:{logical_count}")


# cpu状态
stats = psutil.cpu_stats()
print(f"cpu当前状态:{stats}")

# cpu频率
freq = psutil.cpu_freq()
print(f"cpu的频率:{freq}")

结果:

CPU的详细信息:scputimes(user=1134.52, nice=7.61, system=555.98, idle=15817.17, iowait=41.83, irq=0.0, softirq=27.35, steal=0.0, guest=0.0, guest_nice=0.0)
当前CPU总使用率为:1.5%
当前每个CPU使用率为:[19.2, 19.4, 16.3, 13.1]
当前CPU总详细使用率为:scputimes(user=9.6, nice=0.0, system=5.1, idle=84.8, iowait=0.3, irq=0.0, softirq=0.3, steal=0.0, guest=0.0, guest_nice=0.0)%
CPU逻辑核数:4
CPU物理核数:22
cpu当前状态:scpustats(ctx_switches=11882258, interrupts=6862862, soft_interrupts=3863165, syscalls=0)
cpu的频率:scpufreq(current=931.42925, min=800.0, max=3500.0)

2.内存:

#coding=utf-8
import psutil

# 虚拟内存 总内存
virtual = psutil.virtual_memory()
print(f"虚拟内存信息:{virtual}")

# 交换分区
swap = psutil.swap_memory()
print(f"交换分区:{swap}")

结果:

虚拟内存信息:svmem(total=8339914752, available=4141465600, percent=50.3, used=3977195520, free=1327108096, active=3962109952, inactive=1365458944, buffers=316178432, cached=2719432704, shared=89669632, slab=702013440)
交换分区:sswap(total=2147479552, used=0, free=2147479552, percent=0.0, sin=0, sout=0)

3.硬盘:

#coding=utf-8
import psutil

# 获取硬盘信息
disk = psutil.disk_partitions()
print(f"硬盘的信息:{disk}")

# 获取分区状态
usage = psutil.disk_usage('/')
print(f"'/'分区状态:{usage}")

# 获取单个分区的IO个数
io_counters = psutil.disk_io_counters(perdisk=False)
print(f"单个分区的io个数:{io_counters}")

结果:

硬盘的信息:[sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,relatime,errors=remount-ro,data=ordered')]
'/'分区状态:sdiskusage(total=63142932480, used=23225364480, free=36679671808, percent=38.8)
单个分区的io个数:sdiskio(read_count=95823, write_count=61962, read_bytes=1900379136, write_bytes=1490157568, read_time=156552, write_time=247832, read_merged_count=28869, write_merged_count=85194, busy_time=56828)

4.网络:

# coding=utf-8
import psutil

# 获取网络读写字节/包的个数
io_counters = psutil.net_io_counters()
print(f"网络读写字节/包的个数:{io_counters}")


# 输出网络每个接口读写字节/包的个数
print("网络每个接口读写字节/包的个数:")
counters = psutil.net_io_counters(pernic=True)
for port, value in counters.items():
    print(f"{port}:{value}")


# 获取网络接口信息
print("获取网络接口信息:")
if_addrs = psutil.net_if_addrs()
for port, value in if_addrs.items():
    print(f"{port}:{value}")


# 获取网络接口状态
print("获取网络接口状态:")
if_stats = psutil.net_if_stats()
for port, value in if_stats.items():
    print(f"{port}:{value}")

结果:

网络读写字节/包的个数:snetio(bytes_sent=6802690, bytes_recv=54851021, packets_sent=33268, packets_recv=63304, errin=0, errout=0, dropin=0, dropout=0)
网络每个接口读写字节/包的个数:
ens33:snetio(bytes_sent=6227927, bytes_recv=54276258, packets_sent=27193, packets_recv=57229, errin=0, errout=0, dropin=0, dropout=0)
lo:snetio(bytes_sent=574763, bytes_recv=574763, packets_sent=6075, packets_recv=6075, errin=0, errout=0, dropin=0, dropout=0)
获取网络接口信息:
lo:[snicaddr(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_PACKET: 17>, address='00:00:00:00:00:00', netmask=None, broadcast=None, ptp=None)]
ens33:[snicaddr(family=<AddressFamily.AF_INET: 2>, address='192.168.116.131', netmask='255.255.255.0', broadcast='192.168.116.255', ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 10>, address='fe80::71b0:76ea:7c56:e6c1%ens33', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_PACKET: 17>, address='00:0c:29:95:e8:f1', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]
获取网络接口状态:
ens33:snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=1000, mtu=1500)
lo:snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=65536)

5. 传感器(温度、风扇、电池)

# coding=utf-8
import psutil
temperatures = psutil.sensors_temperatures()
print(temperatures)

fans = psutil.sensors_fans()
print(fans)

battery = psutil.sensors_battery()
print(battery)

结果:

{'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],
 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],
 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),
              shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]}
{'asus': [sfan(label='cpu_fan', current=3200)]}
sbattery(percent=93, secsleft=16628, power_plugged=False)

还有一些, 不太常用了.就不写了…

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅弋、璃鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值