python之psutil模块:收集主机系统数据
psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来做系统监控,性能分析,进程管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和Sun Solaris等操作系统。
如下使用psutil模块收集系统各个参数(cpu、内存、存储、网络):
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 import psutil 5 import time 6 import sys 7 8 def host_info(): 9 now_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) 10 start_time=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(psutil.boot_time())) 11 print('\n数据更新时间:',now_time,sep='\n') 12 print('开机时间:',start_time) 13 print('当前用户:',psutil.Process().username()) 14 print('当前用户信息信息:',psutil.users()) 15 16 def cpu_info(): 17 ci=[] 18 #print(psutil.cpu_times()) #元组显示CPU的所有信息 19 #print(psutil.cpu_times().user) #获取user的执行用户进程的cpu时间比 20 #print(psutil.cpu_stats())#元组返回上下文切换,中断,软中断和系统调用的次数统计 21 print(''' 22 ------------------- 23 ******CPU信息****** 24 -------------------''') 25 stats=psutil.cpu_stats() 26 print('CPU状态数据:',end='') 27 print('ctx_switches=',stats[0],' interrupts=',stats[1],' \ 28 soft_interrupts=',stats[2],' syscalls=',stats[1],sep='') 29 print('物理CPU个数:',psutil.cpu_count(logical=False)) 30 print('逻辑CPU个数:',psutil.cpu_count()) 31 print('整体CPU使用率(2s):',psutil.cpu_percent(interval=2)) 32 print('各个CPU使用率:',psutil.cpu_percent(percpu=True,interval=2)) 33 print('逻辑CPU的详细信息:') 34 logicpu=psutil.cpu_times(percpu=True) 35 for i in range(0,4): 36 num=i+1 37 ci.clear() 38 print(' +','逻辑CPU',[num],' ',sep='',end='') 39 ci.append('user='+ str(logicpu[i][0])) 40 ci.append('system'+ str(logicpu[i][1])) 41 ci.append('idle=' + str(logicpu[i][2])) 42 ci.append('interrupt=' + str(logicpu[i][3])) 43 ci.append('dpc=' + str(logicpu[i][4])) 44 print(ci) 45 46 47 def mem_info(): 48 print(''' 49 ------------------- 50 ******内存信息****** 51 -------------------''') 52 print('总内存(可用):',round(psutil.virtual_memory().total/1024/1024/1024,2),'G') 53 print('已使用内存:',round(psutil.virtual_memory().used/1024/1024/1024,2),'G') 54 print('空闲内存:',round(psutil.virtual_memory().free/1024/1024/1024,2),'G') 55 print('内存使用率:',psutil.virtual_memory().percent,'%') 56 print('\n交换(虚拟)内存信息:') 57 print('总交换内存:',round(psutil.swap_memory().total/1024/1024/1024,2),'G') 58 print('已使用内存:',round(psutil.swap_memory().used/1024/1024/1024,2),'G') 59 print('空闲交换内存:',round(psutil.swap_memory().free/1024/1024/1024,2),'G') 60 print('交换内存使用率:',psutil.swap_memory().percent,'%') 61 62 def disk_info(): 63 print(''' 64 ------------------- 65 ******磁盘信息****** 66 -------------------''') 67 print('磁盘信息:') 68 for d in psutil.disk_partitions(): 69 print(d) 70 print('使用信息:') #获取分区使用信息 71 print('\t磁盘总量:',psutil.disk_usage('/').total/1024/1024/1024,'G',' 已使用存储:'\ 72 ,psutil.disk_usage('/').used/1024/1024/1024,'G',\ 73 '\n\t空闲存储:',psutil.disk_usage('/').free/1024/1024/1024,'G',\ 74 ' 磁盘使用率:',psutil.disk_usage('/').percent,'%') 75 print('各个磁盘IO信息:',psutil.disk_io_counters(perdisk=True)) 76 77 def net_info(): 78 print(''' 79 ------------------- 80 ******网卡信息****** 81 -------------------''') 82 #网卡信息 83 #print(psutil.net_io_counters()) #获取网卡的发送和接收的字节大小,发送和接收的包数 84 #print(psutil.net_io_counters(pernic=True)) #获取每个网卡的信息 85 #print(psutil.net_connections()) #获取套接字连接列表 86 #print(psutil.net_if_stats())#获取网卡的状态,通信类型,传输速度,mtu值 87 print('网卡配置信息(包含ip地址,mac地址,子网掩码,广播地址)') 88 for k,v in psutil.net_if_addrs().items(): 89 print('|=->',k,':',v) 90 91 92 def main(): 93 host_info() 94 cpu_info() 95 mem_info() 96 disk_info() 97 net_info() 98 99 f= open('system_info.log', 'w') 100 sys.stdout = f 101 main()
效果如图: