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中的集合类型操作符
Aug 19 Python
在win和Linux系统中python命令行运行的不同
Jul 03 Python
彻底搞懂Python字符编码
Jan 23 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 Python
Python GUI编程 文本弹窗的实例
Jun 11 Python
关于Python形参打包与解包小技巧分享
Aug 24 Python
python定时任务 sched模块用法实例
Nov 04 Python
python向图片里添加文字
Nov 26 Python
Python中six模块基础用法
Dec 08 Python
给Python学习者的文件读写指南(含基础与进阶)
Jan 29 Python
详解python方法之绑定方法与非绑定方法
Aug 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判断所处服务器操作系统的类型
2013/06/20 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
jquery ready函数源代码研究
2009/12/06 Javascript
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
javascript获取图片的top N主色值方法详解
2018/01/26 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
Vue修改项目启动端口号方法
2019/11/07 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
对numpy中二进制格式的数据存储与读取方法详解
2018/11/01 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
广告学专业毕业生自荐信
2013/09/24 职场文书
网上蛋糕店创业计划书
2014/01/24 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
学校周年庆活动方案
2014/08/22 职场文书
承诺书范本
2015/01/21 职场文书
世界文化遗产导游词
2015/02/13 职场文书
爱国教育主题班会
2015/08/14 职场文书
六五普法心得体会2016
2016/01/21 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书