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中的类学习笔记
Sep 23 Python
Python简单连接MongoDB数据库的方法
Mar 15 Python
Python进程间通信之共享内存详解
Oct 30 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
解决Python2.7读写文件中的中文乱码问题
Apr 12 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
pytorch 自定义卷积核进行卷积操作方式
Dec 30 Python
Python warning警告出现的原因及忽略方法
Jan 31 Python
Tensorflow之MNIST CNN实现并保存、加载模型
Jun 17 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
Python操作Excel的学习笔记
Feb 18 Python
Python 匹配文本并在其上一行追加文本
May 11 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
PHILIPS AE3805收音机的分析打磨
2021/03/02 无线电
屏蔽浏览器缓存另类方法
2006/10/09 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
php中取得文件的后缀名?
2012/02/20 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
Laravel框架表单验证详解
2014/09/04 PHP
php支付宝接口用法分析
2015/01/04 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
ExtJS的拖拽效果示例
2013/12/09 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
python计算一个序列的平均值的方法
2015/07/11 Python
python tkinter界面居中显示的方法
2018/10/11 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
python实现五子棋小程序
2019/06/18 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
毕业自我鉴定
2013/11/05 职场文书
党在我心中演讲稿
2014/09/02 职场文书
班主任工作实习计划
2015/01/16 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python
MySQL 字符集 character
2022/05/04 MySQL