python实时监控cpu小工具


Posted in Python onJune 21, 2018

本文实例为大家分享了python实时监控cpu的工具,供大家参考,具体内容如下

虽然写的很不完善,但是当练手吧,对于实时监控cpu还是有点用处的,虽然android studio已经提供了一样的功能,但是能够记录并生成成本地csv文件还是比as多一个功能的。

结果图:

python实时监控cpu小工具

python实时监控cpu小工具

直接放源码:

# !_*_coding:utf-8_*_

import re
import os
import wx
import thread
import pychartdir
import csv

class GetCpuStats():

  def __init__(self, name):
    self.pro_name = name

  def startWatch(self):
    _shell = 'adb shell top -s cpu -n 1| findstr %s' % self.pro_name
    result = os.popen(_shell).read()
    return self.getInfo(result)

  def getInfo(self, _result):
    return [re.findall('(\d+)%', _result), re.findall('K\s(\d+)K', _result)]

class MyFrame(wx.Frame):

  flag = False
  _label = []
  _data = []
  _label02 = []
  _data02 = []
  num = 0
  num02 = 0

  def __init__(self):
    wx.Frame.__init__(self, parent=None, title=u'cpu检测小工具', pos=(700, 100), size=(500, 500))
    mPanel = wx.Panel(parent=self)
    mSizer = wx.BoxSizer(orient=wx.VERTICAL)
    btn_start = wx.Button(parent=mPanel, label=u'开始', style=wx.EXPAND)
    mSizer.Add(btn_start)
    btn_stop = wx.Button(parent=mPanel, label=u'停止', style=wx.EXPAND)
    mSizer.Add(btn_stop)
    self.edit = wx.TextCtrl(parent=mPanel,style=wx.EXPAND,value=u'这里输入测试的包名')
    mSizer.Add(self.edit,flag=wx.EXPAND)
    self.edit.Bind(event=wx.EVT_CHOICE, handler=self.requestFocus)
    self.bitmap_cpu = wx.StaticBitmap(parent=mPanel)
    mSizer.Add(self.bitmap_cpu, flag=wx.EXPAND) 
    #self.bitmap_mem = wx.StaticBitmap(parent=mPanel)
    #mSizer.Add(self.bitmap_mem, flag=wx.EXPAND)   
    mPanel.SetSizer(mSizer)
    mPanel.Fit()
    btn_start.Bind(event=wx.EVT_BUTTON, handler=self.startWatch)
    btn_stop.Bind(event=wx.EVT_BUTTON, handler=self.stopWatch)

  def requestFocus(self,event):
    self.edit.SetValue("")

  def startWatch(self, event): 
    self.flag = True
    thread.start_new_thread(self.getInfo, ())

  def stopWatch(self, event):
    self.flag = False

  def getInfo(self):
    while(self.flag):
      _result = GetCpuStats(self.edit.GetValue()).startWatch()
      self.drawPic(_result)
      #self.drawPic_mem(_result)

  def writeCsv(self, _list):
    writer = csv.writer(file('tmp.csv', 'a+'))
    writer.writerow([_list])

  def drawPic(self,_list):
    self.num+=1
    self._label.append(str(self.num))
    self._data.append(_list[0][0])
    self.writeCsv(_list[0][0])
    c = pychartdir.XYChart(500, 400)
    c.setPlotArea(30, 20, 400, 300)
    c.addLineLayer(self._data)
    c.xAxis().setLabels(self._label)
    c.makeChart("tmp.png")
    mImage = wx.Image("tmp.png")
    mImage = mImage.Scale(500,300)
    self.bitmap_cpu.SetBitmap(wx.BitmapFromImage(mImage))

  def drawPic_mem(self,_list):
    self.num02+=1
    self._label02.append(str(self.num02))
    self._data02.append(_list[1][0])
    c = pychartdir.XYChart(500, 400)
    c.setPlotArea(60, 40, 400, 300)
    c.addLineLayer(self._data02)
    c.xAxis().setLabels(self._label02)
    c.makeChart("tmp02.png")
    mImage = wx.Image("tmp02.png")
    mImage = mImage.Scale(500,300)
    self.bitmap_mem.SetBitmap(wx.BitmapFromImage(mImage))

if __name__ == '__main__':
  app = wx.App()
  MyFrame().Show()
  app.MainLoop()

原理:

界面用wx做的,图形用pychartdir做的,命令用的是top命令,每次截取到的数据都生成一张临时图片,然后刷新到屏幕上,看起来就是实时数据监控的效果了,基本上BUG一大堆,也懒得改了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python群发邮件实例代码
Jan 03 Python
Python装饰器使用示例及实际应用例子
Mar 06 Python
从零开始学Python第八周:详解网络编程基础(socket)
Dec 14 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
python微信撤回监测代码
Apr 29 Python
python滑块验证码的破解实现
Nov 10 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
python怎么自定义捕获错误
Jun 29 Python
python切片作为占位符使用实例讲解
Feb 17 Python
python用字节处理文件实例讲解
Apr 13 Python
如何在python中实现ECDSA你知道吗
Nov 23 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 #Python
python实现简易内存监控
Jun 21 #Python
Python实现的微信好友数据分析功能示例
Jun 21 #Python
python skimage 连通性区域检测方法
Jun 21 #Python
python3实现windows下同名进程监控
Jun 21 #Python
python检测主机的连通性并记录到文件的实例
Jun 21 #Python
Python基于xlrd模块操作Excel的方法示例
Jun 21 #Python
You might like
逐步提升php框架的性能
2008/01/10 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
python中关于日期时间处理的问答集锦
2013/03/08 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
Flask配置Cors跨域的实现
2019/07/12 Python
详解python tkinter模块安装过程
2020/01/06 Python
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
2014年会演讲稿范文
2014/01/06 职场文书
签约仪式主持词
2014/03/19 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
骨干教师培训方案
2014/05/06 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis