Akemi

Python psutil模块案例—获取系统硬件状态

2024/11/05

自带的方法能够用来方便的对操作系统硬件状态进行监控

获取当前进程pid和名称

1
2
3
4
#coding=utf-8
import psutil
for proc in psutil.process_iter(['pid','name']):
print(f"PID:{proc.info['pid']}, Name:{proc.info['name']}")

获取操作系统各个分区磁盘使用情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#coding=utf-8
import psutil

def get_disk_usage():
# 获取分区状态
partitions = psutil.disk_partitions()
for partition in partitions:
# 遍历每个分区
usage=psutil.disk_usage(partition.mountpoint)
# 计算出disk的各个使用情况
total_gb=usage.total / (2**30)
usage_gb=usage.used / (2**30)
free_gb=usage.free / (2**30)
# 输出使用情况
print(f"挂载点:{partition.mountpoint}")
print(f"总空间:{total_gb:.2f}GiB")
print(f"已用空间:{usage_gb:.2f}GiB")
print(f"剩余空间:{free_gb:.2f}GiB")
print("_"*30)

get_disk_usage()

获取硬件使用情况报告

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#coding=UTF-8
import psutil
import shutil
import datetime

def get_system_hardware_report():
report=[]
report.append(f"报告生成时间:{datetime.datetime.now().strftime('%m-%d')}")
report.append(f"CPU使用率:{psutil.cpu_percent()}%")
report.append(f"内存使用率:{psutil.virtual_memory().percent}%")
# 根目录挂载点磁盘使用情况
total,used,free=shutil.disk_usage('/')
report.append(f"磁盘总空间:{total//(2**30)}GiB")
report.append(f"磁盘已用空间:{used//(2**30)}GiB")
report.append(f"磁盘剩余空间:{free//(2**30)}GiB")
return "\n".join(report)

print(get_system_hardware_report())

获取网络接受数据情况

1
2
3
4
5
6
7
8
9
10
#coding=utf-8
import psutil

def get_network_status():
# net_io是个元组
net_io=psutil.net_io_counters()
print(f"总接受字节数:{net_io.bytes_recv/(2**20):.2f}MB")
print(f"总发送字节数:{net_io.bytes_sent/(2**20):.2f}MB")

get_network_status()

获取CPU使用率

1
2
3
4
5
6
7
8
#coding=utf-8
import psutil
def get_cpu_percent():
# interval周期,同时percpu
cpu_percent=psutil.cpu_percent(interval=1,percpu=True)
print(f"每个CPU使用率:{cpu_percent}")
print(f"整体CPU使用率:{psutil.cpu_percent()}")
get_cpu_percent()

获取物理内存与交换分区情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#coding=utf-8
import psutil
def get_memory_usage():
# 用元组接收
virtual_memory = psutil.virtual_memory()
swap_memory = psutil.swap_memory()
#
print(f"物理内存总量:{virtual_memory.total/(2**30):.2f}GiB")
print(f"物理内存已用:{virtual_memory.used/(2**30):.2f}GiB")
print(f"物理内存剩余:{virtual_memory.free/(2**30):.2f}GiB")
print(f"交换分区总量:{swap_memory.total/(2**30):.2f}GiB")
print(f"交换分区已用:{swap_memory.used/(2**30):.2f}GiB")
print(f"交换分区剩余:{swap_memory.free/(2**30):.2f}GiB")

get_memory_usage()

获取系统负载

1
2
3
4
5
6
7
8
9
#coding=utf-8
import psutil
def get_sys_load():
# 用元组接收
load=psutil.getloadavg()
print(f"系统1分钟负载:{load[0]}")
print(f"系统5分钟负载:{load[1]}")
print(f"系统15分钟负载:{load[2]}")
get_sys_load()
CATALOG