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将人民币转换大写的脚本代码
Feb 10 Python
go语言计算两个时间的时间差方法
Mar 13 Python
详解常用查找数据结构及算法(Python实现)
Dec 09 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
Feb 08 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
对python3中pathlib库的Path类的使用详解
Oct 14 Python
Python原始套接字编程实例解析
Jan 29 Python
一文轻松掌握python语言命名规范规则
Jun 18 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
python实现邮件循环自动发件功能
Sep 11 Python
浅谈Python列表嵌套字典转化的问题
Apr 07 Python
python3 实现mysql数据库连接池的示例代码
Apr 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
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
PHP多维数组排序array详解
2017/11/21 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
一个基于jquery的图片切换效果
2010/07/06 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
js DOM的学习笔记
2011/12/22 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
Js,alert出现乱码问题的解决方法
2013/06/19 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
js有序数组的连接问题
2013/10/01 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
2015/03/03 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
jquery validate demo 基础
2015/10/29 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
javascript基于定时器实现进度条功能实例
2017/10/13 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
angular学习之动态创建表单的方法
2018/12/07 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
Python编写电话薄实现增删改查功能
2016/05/07 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
商铺租赁意向书
2014/04/01 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
TV动画《间谍过家家》公开PV
2022/03/20 日漫