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利用拉链法实现字典方法示例
Mar 25 Python
python如何统计序列中元素
Jul 31 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
python selenium 弹出框处理的实现
Feb 26 Python
Python简单基础小程序的实例代码
Apr 28 Python
Python 动态导入对象,importlib.import_module()的使用方法
Aug 28 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
django框架创建应用操作示例
Sep 26 Python
python实现随机加减法生成器
Feb 24 Python
利用python实现平稳时间序列的建模方式
Jun 03 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 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判断远程url是否有效的几种方法小结
2011/10/08 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
jquery dataTable 获取某行数据
2017/05/05 jQuery
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
Windows下为Python安装Matplotlib模块
2015/11/06 Python
python 默认参数问题的陷阱
2016/02/29 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
2019/10/11 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
Python try except else使用详解
2021/01/12 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
销售文员岗位职责
2013/11/29 职场文书
国际商务专业求职信
2014/07/15 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
参加招聘会后的感想
2015/08/10 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技