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利用Nagios增加微信报警通知的功能
Feb 18 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
Python 面试中 8 个必考问题
Nov 16 Python
Python 3.8新特征之asyncio REPL
May 28 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
python 解决flask uwsgi 获取不到全局变量的问题
Dec 22 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
用python实现监控视频人数统计
May 21 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比较两个绝对时间的大小
2014/01/31 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
2013/05/17 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
python远程登录代码
2008/04/29 Python
使用python解析xml成对应的html示例分享
2014/04/02 Python
简单介绍Python中的decode()方法的使用
2015/05/18 Python
Python实现高效求解素数代码实例
2015/06/30 Python
Python实现telnet服务器的方法
2015/07/10 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
pip安装python库的方法总结
2019/08/02 Python
python suds访问webservice服务实现
2020/06/26 Python
详解scrapy内置中间件的顺序
2020/09/28 Python
表达自我的市场:Society6
2018/08/01 全球购物
网络方面基础面试题
2012/11/16 面试题
买卖车协议书
2014/04/21 职场文书
竞聘上岗演讲
2014/05/19 职场文书
师德承诺书2015
2015/04/28 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python
React 并发功能体验(前端的并发模式)
2021/07/01 Javascript
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS