python和bash统计CPU利用率的方法


Posted in Python onJuly 10, 2015

本文实例讲述了python和bash统计CPU利用率的方法。分享给大家供大家参考。具体如下:

开始的时候写了一个 bash 的实现;
因为最近也在学习 python ,所以就尝试着用 python 再实现一回;
支援 python2 环境;
请各位给予下建议,有什么改良的地方可以提一下,不甚感激;

Python代码如下:

#!/usr/bin/python
# -*- coding:utf8 -*-
__author__ = 'chenwx'
def cpu_rate():
  import time
  def cpu_r():
    f = open("/proc/stat","r")
    for f_line in f:
      break
    f.close()
    f_line = f_line.split(" ")
    f_line_a=[]
    for i in f_line:
      if i.isdigit():
        i=int(i)
        f_line_a.append(i)
    total = sum(f_line_a)
    idle = f_line_a[3]
    return total,idle
  total_a,idle_a=cpu_r()
  time.sleep(2)
  total_b,idle_b=cpu_r()
  sys_idle = idle_b - idle_a
  sys_total = total_b - total_a
  sys_us = sys_total - sys_idle
  cpu_a = (float(sys_us)/sys_total)*100
  return cpu_a
# print cpu_rate()

bash的实现方式:

#!/bin/bash
# 感觉计算数组这里应该还有办法简化的吧;
# 我一时没想到,请大家提一下建议,多谢;
cpu_a=(`grep 'cpu ' /proc/stat`)
total_a=$((${cpu_a[1]}+${cpu_a[2]}+${cpu_a[3]}+${cpu_a[4]}+${cpu_a[5]}+${cpu_a[6]}+${cpu_a[7]}+${cpu_a[8]}+${cpu_a[9]}))
idle_a=${cpu_a[4]}
sleep 5
cpu_b=(`grep 'cpu ' /proc/stat`)
total_b=$((${cpu_b[1]}+${cpu_b[2]}+${cpu_b[3]}+${cpu_b[4]}+${cpu_b[5]}+${cpu_b[6]}+${cpu_b[7]}+${cpu_b[8]}+${cpu_b[9]}))
idle_b=${cpu_b[4]}
sys_idle=$(($idle_b-$idle_a))
sys_total=$(($total_b-$total_a))
sys_us=$(($sys_total-$sys_idle))
echo "scale=2;$sys_us/$sys_total*100" | bc

遍历数组的方法:

# 找到了解决数组计算的办法了,不过感觉for循环计算的方式还是有些繁琐;
# 不知道有没有那种对数组内所有值一并计算的方法;
cpu_rate_a () {
cpu_a=(`grep 'cpu ' /proc/stat`)
for i in ${cpu_a[@]:1}
do
  total_a=$(($total_a+$i))
done
idle_a=${cpu_a[4]}
sleep 5
cpu_b=(`grep 'cpu ' /proc/stat`)
for i in ${cpu_b[@]:1}
do
  total_b=$(($total_b+$i))
done
idle_b=${cpu_b[4]}
sys_idle=$(($idle_b-$idle_a))
sys_total=$(($total_b-$total_a))
sys_us=$(($sys_total-$sys_idle))
local_cpu_rate=$(echo "scale=2;$sys_us/$sys_total*100" | bc)
}

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python 生成不重复的随机数的代码
May 15 Python
python操作gmail实例
Jan 14 Python
Python中使用PyQt把网页转换成PDF操作代码实例
Apr 23 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
python实现Floyd算法
Jan 03 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
Sep 17 Python
对Python subprocess.Popen子进程管道阻塞详解
Oct 29 Python
Python中对数组集进行按行打乱shuffle的方法
Nov 08 Python
python 三元运算符使用解析
Sep 16 Python
利用OpenCV和Python实现查找图片差异
Dec 19 Python
python Matplotlib模块的使用
Sep 16 Python
Django路由层如何获取正确的url
Jul 15 Python
Python多线程下载文件的方法
Jul 10 #Python
Python爬取国外天气预报网站的方法
Jul 10 #Python
Python实现比较两个文件夹中代码变化的方法
Jul 10 #Python
python简单文本处理的方法
Jul 10 #Python
Python实现把json格式转换成文本或sql文件
Jul 10 #Python
Python中的一些陷阱与技巧小结
Jul 10 #Python
Python中的fileinput模块的简单实用示例
Jul 09 #Python
You might like
递归列出所有文件和目录
2006/10/09 PHP
PHP个人网站架设连环讲(三)
2006/10/09 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
PHP session 会话处理函数
2016/06/06 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
python 通过xml获取测试节点和属性的实例
2018/03/31 Python
Python全排列操作实例分析
2018/07/24 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
30年同学聚会邀请函
2014/01/25 职场文书
班主任工作经验材料
2014/02/02 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
优秀教师推荐材料
2014/12/16 职场文书
经验交流材料格式
2014/12/30 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers