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多线程ctrl+c退出问题解决方案
Oct 23 Python
Python中关于字符串对象的一些基础知识
Apr 08 Python
python脚本内运行linux命令的方法
Jul 02 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
Jan 12 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
Mar 22 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
如何在Django项目中引入静态文件
Jul 26 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
Aug 13 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 Python
python 网络编程要点总结
Jun 18 Python
Python中的程序流程控制语句
Feb 24 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 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
js 多浏览器分别判断代码
2010/04/01 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
JS前端笔试题分析
2016/12/19 Javascript
Bootstrap3 图片(响应式图片&图片形状)
2017/01/04 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
js正则取值的结果数组调试方法
2018/10/10 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
Python列表生成器的循环技巧分享
2015/03/06 Python
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
python opencv实现运动检测
2018/07/10 Python
python hook监听事件详解
2018/10/25 Python
详解python多线程之间的同步(一)
2019/04/03 Python
简单了解python的break、continue、pass
2019/07/08 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
学术会议邀请函范文
2014/01/22 职场文书
竞聘书格式及范文
2014/03/31 职场文书
薪资证明范本
2015/06/19 职场文书