系列文章目录
python开发低代码数据可视化大屏:pandas.read_excel读取表格 python实现直接读取excle数据实现的百度地图标注 python数据可视化开发(1):Matplotlib库基础知识 python数据可视化开发(2):pandas读取Excel的数据格式处理
文章目录
系列文章目录
前言 1.psutil模块说明 Memory内存相关 CPU相关 Disk相关 Network相关 进程管理
2.封装函数 数据格式化
前言
psutil是一个开源切跨平台的库,其提供了便利的函数用来获取才做系统的信息,比如CPU,内存,磁盘,网络等。此外,psutil还可以用来进行进程管理,包括判断进程是否存在、获取进程列表、获取进程详细信息等。而且psutil还提供了许多命令行工具提供的功能,包括:ps,top,lsof,netstat,ifconfig, who,df,kill,free,nice,ionice,iostat,iotop,uptime,pidof,tty,taskset,pmap。
1.psutil模块说明
psutil包含了异常、类、功能函数和常量,其中功能函数用来获取系统的信息,如CPU、磁盘、内存、网络等。类用来实现进程的管理功能。根据函数的功能,主要分为CPU、磁盘、内存、网络几类,下面将会总几个方面来介绍psutil提供的功能函数。
Memory内存相关
函数 描述 virtual_memory() 以命名元组的形式返回内存使用情况,包括总内存,可用内存,内存利用率,buffer和cache等。单位为字节。 swap_memory() 以命名元组的形式返回swap/memory使用情况,包含swap中页的换入和换出。
CPU相关
函数 描述 psutil.cpu_count() cpu_count(,[logical]):默认返回逻辑CPU的个数,当设置logical的参数为False时,返回物理CPU的个数。 psutil.cpu_percent() cpu_percent(,[percpu],[interval]):返回CPU的利用率,percpu为True时显示所有物理核心的利用率,interval不为0时,则阻塞时显示interval执行的时间内的平均利用率 psutil.cpu_times() cpu_times(,[percpu]):以命名元组(namedtuple)的形式返回cpu的时间花费,percpu=True表示获取每个CPU的时间花费 psutil.cpu_times_percent() cpu_times_percent(,[percpu]):功能和cpu_times大致相同,看字面意思就能知道,该函数返回的是耗时比例。 psutil.cpu_stats() cpu_stats()以命名元组的形式返回CPU的统计信息,包括上下文切换,中断,软中断和系统调用次数。 psutil.cpu_freq() cpu_freq([percpu]):返回cpu频率
Disk相关
函数 描述 psutil.disk_io_counters() disk_io_counters([perdisk]):以命名元组的形式返回磁盘io统计信息(汇总的),包括读、写的次数,读、写的字节数等。当perdisk的值为True,则分别列出单个磁盘的统计信息(字典:key为磁盘名称,value为统计的namedtuple)。 psutil.disk_partitions() disk_partitions([all=False]):以命名元组的形式返回所有已挂载的磁盘,包含磁盘名称,挂载点,文件系统类型等信息。当all等于True时,返回包含/proc等特殊文件系统的挂载信息 psutil.disk_usage() disk_usage(path):以命名元组的形式返回path所在磁盘的使用情况,包括磁盘的容量、已经使用的磁盘容量、磁盘的空间利用率等。
Network相关
函数 描述 psutil.net_io_counter([pernic]) 以命名元组的形式返回当前系统中每块网卡的网络io统计信息,包括收发字节数,收发包的数量、出错的情况和删包情况。当pernic为True时,则列出所有网卡的统计信息。 psutil.net_connections([kind]) 以列表的形式返回每个网络连接的详细信息(namedtuple)。命名元组包含fd, family, type, laddr, raddr, status, pid等信息。kind表示过滤的连接类型,支持的值如下:(默认为inet) psutil.net_if_addrs() 以字典的形式返回网卡的配置信息,包括IP地址和mac地址、子网掩码和广播地址。 psutil.net_if_stats() 返回网卡的详细信息,包括是否启动、通信类型、传输速度与mtu。 psutil.users() 以命名元组的方式返回当前登陆用户的信息,包括用户名,登陆时间,终端,与主机信息 psutil.boot_time() 以时间戳的形式返回系统的启动时间
进程管理
函数 描述 psutil.pids() 以列表的形式返回当前正在运行的进程 psutil.pid_exists(1) 判断给点定的pid是否存在 psutil.process_iter() 迭代当前正在运行的进程,返回的是每个进程的Process对象 psutil.Process() 对进程进行封装,可以使用该类的方法获取进行的详细信息,或者给进程发送信号。
2.封装函数
import json
import psutil
import datetime
import socket
import uuid
def get_mac_address ( ) :
mac = uuid. UUID( int = uuid. getnode( ) ) . hex [ - 12 : ]
return ":" . join( [ mac[ e: e + 2 ] for e in range ( 0 , 11 , 2 ) ] )
def get_my_computer ( ) :
hostname = socket. gethostname( )
ip = socket. gethostbyname( hostname)
users_list = "," . join( [ u. name for u in psutil. users( ) ] )
start_time = datetime. datetime. fromtimestamp( psutil. boot_time( ) ) . strftime( "%Y-%m-%d %H:%M:%S" )
sys_info = { "hostname" : hostname, "ip" : ip, "mac" : get_mac_address( ) , "user" : users_list, "start_time" : start_time}
cpu1 = psutil. cpu_count( )
cpu2 = str ( psutil. cpu_percent( interval= 1 ) ) + '%'
cpu = { "amount" : cpu1, "rate" : cpu2}
mem = psutil. virtual_memory( )
mem_total = round ( mem. total / 1024 / 1024 / 1024 , 2 )
mem_free = round ( mem. free / 1024 / 1024 / 1024 , 2 )
mem_percent = str ( mem. percent) + '%'
mem_used = round ( mem. used / 1024 / 1024 / 1024 , 2 )
ddr = { "total" : mem_total, "free" : mem_free, "rate" : mem_percent, "used" : mem_used}
io = psutil. disk_partitions( )
disk = [ ]
for i in io:
o = psutil. disk_usage( i. device)
disk_data = { "disk_name" : i. device,
"total" : round ( o. total / ( 1024.0 * 1024.0 * 1024.0 ) , 1 ) ,
"used" : round ( o. used / ( 1024.0 * 1024.0 * 1024.0 ) , 1 ) ,
"surplus" : round ( o. free / ( 1024.0 * 1024.0 * 1024.0 ) , 1 ) ,
"rate" : psutil. disk_usage( i. device) . percent}
disk. append( disk_data)
net_info = psutil. net_io_counters( )
bytes_sent = '{0:.2f}' . format ( net_info. bytes_recv / 1024 / 1024 )
bytes_rcvd = '{0:.2f}' . format ( net_info. bytes_sent / 1024 / 1024 )
net = { "bytes_sent" : bytes_sent, "bytes_rcvd" : bytes_rcvd}
data = { "sys" : sys_info, "cpu" : cpu, "ddr" : ddr, "disk" : disk, "net" : net}
return data
数据格式化
调用函数
data = get_my_computer( )
re = json. dumps( data)
print ( data)
JSON输出数据
{ 'sys' : { 'hostname' : 'poleung-len' , 'ip' : '192.168.4.16' , 'mac' : '4c:79:6e:4f:ff:0f' , 'user' : 'poleung' , 'start_time' : '2023-01-24 08:18:44' } , 'cpu' : { 'amount' : 8 , 'rate' : '32.8%' } , 'ddr' : { 'total' : 15.79 , 'free' : 4.19 , 'rate' : '73.5%' , 'used' : 11.6 } , 'disk' : [ { 'disk_name' : 'C:\\' , 'total' : 200.0 , 'used' : 171.9 , 'surplus' : 28.1 , 'rate' : 86.0 } , { 'disk_name' : 'D:\\' , 'total' : 129.2 , 'used' : 105.2 , 'surplus' : 24.0 , 'rate' : 81.4 } , { 'disk_name' : 'E:\\' , 'total' : 146.5 , 'used' : 127.5 , 'surplus' : 18.9 , 'rate' : 87.1 } ] , 'net' : { 'bytes_sent' : '927.60' , 'bytes_rcvd' : '2336.88' } }
总结
对电脑系统信息的读取,涉及到psutil和socket模块。本文是将使用到的信息,封装成单独的函数,然后使用JSON输出,便于后期数据可视化大屏API的对接。后续开发工作的内容包括:
系统数据信息入库(pymysql模块) 数据图表化展示(matplotlib、pyecharts模块) web端数据可视化(flask模块) 数据导出(pandas模块)
@漏刻有时