• 获得CPU利用率(python调用top命令实现)


    本文定位:想通过python调用top命令获取cpu使用率但暂时没有思路的情况。

    测试环境:CentOS 6.0_x64 + Python 2.6

    如果单纯为了获得cpu的利用率,通过top命令重定向可以轻松实现,命令如下:

    top -bi > cpuHistory.log

    top -bi | tee cpuHistory.log

    这个就不解释了,不懂的朋友查询下top的帮助文档。这里要实现的是通过python调用top命令,并获得cpu的利用率信息。
    用过popen的朋友很快就能想到类似如下的代码(这个是我第一次写的代码,*_*):

    1 #! /usr/bin/python
    2
    3 import os,time
    4
    5 time2sleep = 1.5
    6 while True:
    7 print os.popen('top -bi -n 1').read().split('\n')[2]
    8 time.sleep(time2sleep)

    原理看起来没错,可是跑起来就出问题了:cpu的idle值一直不变!!!
    原因在于执行的命令“top -bi -n 1”:单独执行这个命令,你会发现输出结果中cpu的idle值就是一直不变的。
    所以不能这样写……
    在终端执行“top -bi -n 2”命令,你会发现第二个值每次都在变化,这个就是我们想要结果。
    考虑到时间问题,命令这样写会更好:“top -bi -n 2 -d 0.02”
    代码如下:

     1 #! /usr/bin/python
    2 '''
    3 File : cpuRate.py
    4 Author : Mike
    5 E-Mail : Mike_Zhang@live.com
    6 '''
    7 import os,time
    8
    9 time2sleep = 2.5
    10 while True:
    11 print int(time.time()),
    12 print os.popen('top -bi -n 2 -d 0.02').read().split('\n\n\n')[1].split('\n')[2]
    13 time.sleep(time2sleep)

    执行效果如下:

    $ ./cpuRate.py 
    1328109437 Cpu(s): 10.0%us, 20.0%sy, 0.0%ni, 70.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    1328109441 Cpu(s): 0.0%us, 16.7%sy, 0.0%ni, 83.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    1328109444 Cpu(s): 0.0%us, 16.7%sy, 0.0%ni, 83.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    1328109447 Cpu(s): 12.5%us, 12.5%sy, 0.0%ni, 75.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

    好,就这些了,希望对你有帮助。

  • E-Mail : Mike_Zhang@live.com
  • 转载请注明出处,谢谢!
  • 相关阅读:
    分层图最短路(DP思想) BZOJ2662 [BeiJing wc2012]冻结
    动态规划 BZOJ1925 地精部落
    线性DP SPOJ Mobile Service
    线性DP codevs2185 最长公共上升子序列
    数位DP POJ3208 Apocalypse Someday
    线性DP POJ3666 Making the Grade
    杨氏矩阵 线性DP? POJ2279 Mr.Young's Picture Permutations
    tarjan强连通分量 洛谷P1262 间谍网络
    树链剖分 BZOJ3589 动态树
    二分图 BZOJ4554 [Tjoi2016&Heoi2016]游戏
  • 原文地址:https://www.cnblogs.com/MikeZhang/p/cpuRatePythonTop.html
  • Copyright © 2020-2023  润新知