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('
数据更新时间:',now_time,sep='
')
 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('
交换(虚拟)内存信息:')
 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('	磁盘总量:',psutil.disk_usage('/').total/1024/1024/1024,'G',' 已使用存储:'
 72           ,psutil.disk_usage('/').used/1024/1024/1024,'G',
 73           '
	空闲存储:',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()

效果如图:

原文地址:https://www.cnblogs.com/cooper-73/p/10179881.html