python使用psutil模块获取系统状态


Posted in Python onAugust 27, 2016

获取操作系统的当前运行状态和负载情况,是一个系统管理员的基本技能,因为这对我们日常排查故障,定位问题有着非常紧密的联系,比如查看当前系统的基本信息,例如cpu,内存,网络接收包情况,磁盘的使用率等就是我们日常系统管理员经常要关注的内容,既然这些信息如此重要,那能否每次登陆系统的时候自动给我们展示出来呢,其实解决这个问题很简单,我们可以写个脚本,这个脚本打印出我们关注的信息,然后把这个脚本放到.bashrc里,这样每次登陆系统就会自动调用这个脚本来运行,输出当前的系统信息,既然想清楚了,那就动手进入今天的主题,用我们今天的主角python的psutil模块来实现获取系统状态, 该模块可以获取正在运行的进程信息和系统的CPU及内存的利用率,这个模块功能非常强大,另外它还是跨平台的,在其它系统上也能很好的运行,往下我们来看一个实际的例子来展示下如何使用psutil模块:

#!/usr/bin/env python
#coding:utf-8
import psutil
import time
import sys
from optparse import OptionParser
parser = OptionParser() 
parser.add_option("-t", "--time", dest="time",
         help="此参数可查看当前下载占的带宽,-t是测试时间", metavar="10") 
parser.add_option("-d", "--deamon",action="store_false", dest="deamon", default=True, 
         help="后台运行此脚本") 
 
def Sysinfo():
  Boot_Start = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(psutil.boot_time())) 
  time.sleep(0.5)
  Cpu_usage = psutil.cpu_percent()
  RAM = int(psutil.virtual_memory().total/(1027*1024))
  RAM_percent = psutil.virtual_memory().percent
  Swap = int(psutil.swap_memory().total/(1027*1024))
  Swap_percent = psutil.swap_memory().percent
  Net_sent = psutil.net_io_counters().bytes_sent
  Net_recv = psutil.net_io_counters().bytes_recv
  Net_spkg = psutil.net_io_counters().packets_sent
  Net_rpkg = psutil.net_io_counters().packets_recv
  BFH = r'%'
  print " \033[1;32m开机时间:%s\033[1;m" % Boot_Start
  print " \033[1;32m当前CPU使用率:%s%s\033[1;m" % (Cpu_usage,BFH)
  print " \033[1;32m物理内存:%dM\t使用率:%s%s\033[1;m" % (RAM,RAM_percent,BFH)
  print "\033[1;32mSwap内存:%dM\t使用率:%s%s\033[1;m" % (Swap,Swap_percent,BFH)
  print " \033[1;32m发送:%d Byte\t发送包数:%d个\033[1;m" % (Net_sent,Net_spkg)
  print " \033[1;32m接收:%d Byte\t接收包数:%d个\033[1;m" % (Net_recv,Net_rpkg)
 
  for i in psutil.disk_partitions():
    print " \033[1;32m盘符: %s 挂载点: %s 使用率: %s%s\033[1;m" % (i[0],i[1],psutil.disk_usage(i[1])[3],BFH)
 
def Net_io(s):
  x = 0
  sum = 0
  while True:
    if x >= s:
      break
    r1 = psutil.net_io_counters().bytes_recv
    time.sleep(1)
    r2 = psutil.net_io_counters().bytes_recv
    y = r2 - r1
    print "%.2f Kb/s" % (y / 1024.0)
    sum += y
    x += 1
  result = sum / x
  print "\033[1;32m%s秒内平均速度:%.2f Kb/s \033[1;m" % (x,result / 1024.0)
if __name__ == "__main__":
  (options, args) = parser.parse_args() 
  if options.time:
    Net_io(int(options.time))
  else:
    Sysinfo()

脚本运行方式有2种,如果不加参数可以直接输出当前操作系统信息,例如:

[root@test demo_script]# python get_sysinfo.py 
 开机时间:2015-09-16 15:21:19
 当前CPU使用率:2.0%
 物理内存:3991M 使用率:22.2%
Swap内存:0M  使用率:0.0%
 发送:47886457797 Byte 发送包数:74127845个
 接收:102287702165 Byte    接收包数:952507264个
 盘符: /dev/xvda1 挂载点: / 使用率: 44.2%

另一种方式是加入-t参数,后面跟一个数字,查看给定秒内的平均网络速度,如下:

[root@test demo_script]# python get_sysinfo.py -t 10
0.08 Kb/s
0.05 Kb/s
0.04 Kb/s
0.04 Kb/s
0.04 Kb/s
0.04 Kb/s
0.04 Kb/s
0.08 Kb/s
0.04 Kb/s
0.04 Kb/s
10秒内平均速度:0.05 Kb/s

关于psutil模块的更多用法,大家可以查看这个网站http://pythonhosted.org/psutil/,里面写的非常详细。

Python 相关文章推荐
Python中非常实用的一些功能和函数分享
Feb 14 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
python中map、any、all函数用法分析
Apr 21 Python
Python利用IPython提高开发效率
Aug 10 Python
python实现爬取图书封面
Jul 05 Python
python 读取文本文件的行数据,文件.splitlines()的方法
Jul 12 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
python numpy中cumsum的用法详解
Oct 17 Python
基于python实现把图片转换成素描
Nov 13 Python
python爬虫之遍历单个域名
Nov 20 Python
python 实现一个反向单位矩阵示例
Nov 29 Python
Python字符串三种格式化输出
Sep 17 Python
Django Highcharts制作图表
Aug 27 #Python
Python连接DB2数据库
Aug 27 #Python
使用python绘制常用的图表
Aug 27 #Python
python实现实时监控文件的方法
Aug 26 #Python
Python爬取京东的商品分类与链接
Aug 26 #Python
Python设计模式之抽象工厂模式
Aug 25 #Python
简单谈谈python中的Queue与多进程
Aug 25 #Python
You might like
用PHP编程开发“虚拟域名”系统
2006/10/09 PHP
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
php和asp语法上的区别总结
2019/05/12 PHP
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
2013/12/08 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
python中virtualenvwrapper安装与使用
2018/05/20 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
Django 5种类型Session使用方法解析
2020/04/29 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
英国在线药房:Express Chemist
2019/03/28 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
毕业生幼师求职自荐信
2013/10/01 职场文书
技术人员面试提纲
2013/11/28 职场文书
人事行政主管岗位职责
2013/12/22 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
学校实习推荐信
2015/03/27 职场文书
2015年小学数学教师个人工作总结
2015/05/25 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
Go 内联优化让程序员爱不释手
2022/06/21 Golang