随笔 - 272  文章 - 0  评论 - 283  阅读 - 142万

获得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

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

posted on   Mike_Zhang  阅读(10727)  评论(4编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2012年2月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示