本文实例为大家分享了python实时监控cpu的工具,供大家参考,具体内容如下
虽然写的很不完善,但是当练手吧,对于实时监控cpu还是有点用处的,虽然android studio已经提供了一样的功能,但是能够记录并生成成本地csv文件还是比as多一个功能的。
结果图:
直接放源码:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# !_*_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一大堆,也懒得改了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/Cloud_Huan/article/details/51822783