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)

還有一些, 不太常用了.就不寫了…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章