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基于socket实现网络广播的方法
Apr 29 Python
python实现各进制转换的总结大全
Jun 18 Python
单利模式及python实现方式详解
Mar 20 Python
关于python之字典的嵌套,递归调用方法
Jan 21 Python
Python两个字典键同值相加的几种方法
Mar 05 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
python多线程同步实例教程
Aug 11 Python
在TensorFlow中屏蔽warning的方式
Feb 04 Python
python多进程下的生产者和消费者模型
May 07 Python
Django模板获取field的verbose_name实例
May 19 Python
如何从csv文件构建Tensorflow的数据集
Sep 21 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 11 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
example2.php
2006/10/09 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
JS实现音乐钢琴特效
2020/01/06 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
python Django连接MySQL数据库做增删改查
2013/11/07 Python
Python入门篇之函数
2014/10/20 Python
python统计一个文本中重复行数的方法
2014/11/19 Python
简介Django中内置的一些中间件
2015/07/24 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
Python中一些深不见底的“坑”
2019/06/12 Python
PyTorch中常用的激活函数的方法示例
2019/08/20 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
python中pop()函数的语法与实例
2020/12/01 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
如何写一个自定义标签
2012/12/28 面试题
师范类求职信
2014/06/21 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
教师节联欢会主持词
2015/07/04 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
SQLServer常见数学函数梳理总结
2022/08/05 MySQL