下面是一个快速而肮脏的系统监视器,我从python中入侵了它:
它使用“系统监视器指示器”(这里)来调用我编写的脚本。使用它:
- 安装
indicator-sysmonitor。要做到这一点,请运行以下命令: sudo apt-add存储库ppa:alexeftimie/ppa && sudo apt-get update & sudo apt-get安装指示符-sysmonitor - 将下面的脚本复制到一个名为sysmonitor的文件中
- 使脚本可执行(
chmod +x path-to-file) - 点击指示器并选择“首选项”。
- 选择“使用此命令”并为其提供sysmonitor文件的路径。下面的代码是:#!/usr/bin/python导入重新导入sys导入时,导入psutil #Functions:_ __ # __ / / \_/ \\/ \_/ \_/ \_/ \#接口字节字节数据包丢弃fifo帧压缩多播字节数据包丢弃fifo colls载波压缩net_re = getInOut()::“”从/proc/net/dev读取进出字节。""“netfile = "/proc/net/dev“尝试:F= open(netfile),除了: sys.stderr.write("ERROR:无法打开"+netfile+".\n") sys.exit(2) f.readline() #烧毁顶部的标题行。f.readline() #刻录第二个标题行。inb =0 outb =0对于f: m= net_re.match( line ) inb += int(m.group(1)) outb += int(m.group(2)) f.close()返回(inb,outb) def sampleNet():“”从网络接口获取I/O示例“。返回makeSample(getInOut) def makeSample(函数):inlist = list() outlist = list() (in字节,out字节)= function() inlist.append(in字节)outlist.append(out字节) time.sleep(1) (in字节,out字节)= function() inlist.append(in字节)outlist.append( out字节)返回(inlist1 - inlist0,outlist1 - outlist0) def diskstatWrapper():用于只返回输入和输出的diskstats_parse函数的“”包装器。""“ds = diskstats_parse("sda")返回(ds“sda”,ds“sda”) def sampleDisk():“”从磁盘获取I/O示例“。返回makeSample(diskstatWrapper) def diskstats_parse(dev=None):“我在堆栈溢出上找到了这个。(http://stackoverflow.com/questions/3329165/python-library-for-monitoring-proc-diskstats)“file_path =‘/proc/diskstats的结果= {} # ref:http://lxr.osuosl.org/source/Documentation/iostats.txt columns_disk = ‘’,‘嗯’,‘开发’,‘读’,‘rd’_mrg‘,’rd_部门‘,’ms_读‘,’写‘,’wr‘_mrg’,wr_部门‘,’ms_书写‘,’cur_ios‘,’ms_正在做什么_io‘,’ms_加权‘ columns_partition = ‘’,‘嗯’,‘开发’,‘读’,‘rd’_扇区‘,’写‘,’wr‘_各部门’ line= open(file_path,'r').readlines()表示行中的行: if行== '':继续拆分= line.split() if len(拆分) != len(columns_disk)和len(拆分) != len(columns_partition):# No match延续数据= dict(zip(columns_disk ),)如果dev != None和dev != data“开发”:继续查找数据中的键: if key != 'dev':data钥匙 =int(数据钥匙)结果[数据“开发”]=数据返回结果#MAIN:____ # __ / / \_/ /\/\//\\/ \_/ \\/\ __ /\\/\ __ /\/ \_/ \_/ \\/\__/\\/ \_/ \/ \_/ \__/\\/ \_/ \/ \_/ \/\= sampleNet() outstr =“outstr += "cpu:”+str(int(psutil.cpu_percent()+“%\t”outstr += "net:“+str(indiff/1000)+str”+str(outdiff/1000)+“K/s\t”(diskin,diskout) =sampleDisk(diskin,diskout)=sampleDisk(Diskin) outstr +=“磁盘”磁盘:“if(diskin):outstr += "+”+=:outstr +=“( if(diskout):outstr +=”+o: outstr += o“打印输出)
编辑:如果您想使用内存(如“top”报告),请添加行
memperc = int(100*float(psutil.used_phymem())/float(psutil.TOTAL_PHYMEM))
outstr += "mem: "+str(memperc)+"%\t"
如果您有psutil 2.0版本,那么您可以获得GNOME系统监视器报告的内存使用情况,并使用以下行:
memperc = int(100*float(psutil.used_phymem()-psutil.cached_phymem())/float(psutil.TOTAL_PHYMEM))
如果你的空间很小,而且你更喜欢使用网速单位(b,k,M),你也可以使用这个。
def withUnit(v):
if v<1024:
return "%03d" % v+"b";
if v<1024**2:
s= ("%f" % (float(v)/1024))[:3];
if s[-1]=='.':
s=s[:-1]
return s +"k";
return ("%f" % (float(v)/(1024**2)))[:3] +"M";
(indiff, outdiff) = sampleNet()
outstr = ""
outstr += "c"+ "%02d" % int(psutil.cpu_percent())+" "
outstr += "m"+ "%02d" % int((100*float(psutil.used_phymem())/float(psutil.TOTAL_PHYMEM)))+" "
outstr += "d"+withUnit(indiff)+" u"+withUnit(outdiff)