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模仿POST提交HTTP数据及使用Cookie值的方法
Nov 10 Python
Python爬取读者并制作成PDF
Mar 10 Python
浅谈Python 的枚举 Enum
Jun 12 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 Python
wxPython之解决闪烁的问题
Jan 15 Python
python如何读写csv数据
Mar 21 Python
python实现统计代码行数的小工具
Sep 19 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
基于Python爬取素材网站音频文件
Oct 21 Python
pytorch常用数据类型所占字节数对照表一览
May 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+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
JS脚本defer的作用示例介绍
2014/01/02 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
js实现网页收藏功能
2015/12/17 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
vue实现可移动的悬浮按钮
2021/03/04 Vue.js
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
python中的decorator的作用详解
2018/07/26 Python
python实现Zabbix-API监控
2018/09/17 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
耐克美国官网:Nike.com
2016/08/01 全球购物
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
面向对象概念面试题(.NET)
2016/11/04 面试题
办公室员工岗位工作职责
2014/03/10 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
房屋转让协议书
2014/10/18 职场文书
捐助倡议书
2015/01/19 职场文书
锅炉工岗位职责
2015/02/13 职场文书
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android