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微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
Aug 21 Python
python3+PyQt5自定义视图详解
Apr 24 Python
目前最全的python的就业方向
Jun 05 Python
使用python爬虫获取黄金价格的核心代码
Jun 13 Python
pygame实现俄罗斯方块游戏(基础篇2)
Oct 29 Python
pytorch torch.expand和torch.repeat的区别详解
Nov 05 Python
基于Python批量生成指定尺寸缩略图代码实例
Nov 20 Python
python3 pathlib库Path类方法总结
Dec 26 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
Feb 24 Python
Python ini文件常用操作方法解析
Apr 26 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
python redis存入字典序列化存储教程
Jul 16 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
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
析构函数与php的垃圾回收机制详解
2013/10/28 PHP
PHP中的命名空间相关概念浅析
2015/01/22 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
2017/09/13 PHP
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
javaScript封装的各种写法
2017/08/14 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
微信小程序实现类似微信点击语音播放效果
2020/03/30 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
编写strcpy函数
2014/06/24 面试题
优秀求职自荐信怎样写
2013/12/18 职场文书
活动总结怎么写啊
2014/05/07 职场文书
开工典礼策划方案
2014/05/23 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
出国导师推荐信
2015/03/25 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python
JS实现数组去重的11种方法总结
2022/04/04 Javascript