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 查找文件夹下所有文件 实现代码
Jul 01 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
Python mutiprocessing多线程池pool操作示例
Jan 30 Python
用Python解数独的方法示例
Oct 24 Python
PyTorch中permute的用法详解
Dec 30 Python
Python自动化测试笔试面试题精选
Mar 12 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 Python
Python高并发和多线程有什么关系
Nov 14 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 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怎样调用MSSQL的存储过程
2006/10/09 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
php上传文件问题汇总
2015/01/30 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
js getElementsByTagName的简写方式
2010/06/27 Javascript
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
JavaScript中的依赖注入详解
2015/03/18 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
基于JavaScript实现的顺序查找算法示例
2017/04/14 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
对Python 内建函数和保留字详解
2018/10/15 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
Python如何对XML 解析
2020/06/28 Python
简述python Scrapy框架
2020/08/17 Python
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
地理科学专业毕业生求职信
2013/10/15 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
2016春节家属慰问信
2015/03/25 职场文书
上班迟到检讨书
2015/05/06 职场文书