python输出一些系统信息 进程内存前10名,CPU前10名信息等

来源:互联网 发布:安广网络 编辑:程序博客网 时间:2024/04/29 04:57
#!/usr/bin/python
#coding:utf-8
import base64;
import sys,os;
import subprocess;
import re;
import psutil;
import json;
import numpy;

def ooStructText(OoS) :
    OoS = OoS.strip('\n');
    OoS = re.sub(' +', ' ', OoS);
    OoS2 = OoS.split('\n');
    OoS2 = map(lambda x:x.strip(' '), OoS2);
    OoS2 = map(lambda x:x.split(' '), OoS2);
    return OoS2;

def ooGetShellOutput(OoComm) :
    OoS = subprocess.Popen(OoComm, shell = True, stdout = subprocess.PIPE,
        universal_newlines = True);
    OoOutput = OoS.communicate();
    OoOutput = OoOutput[0];
    return OoOutput

def ooGetLoadAverage() :
    OoComm = 'uptime | cut -d \' \' -f 14 | cut -d \',\' -f 1';
    OoOutput = ooGetShellOutput(OoComm);
    OoOutput = OoOutput.strip();
    return OoOutput;

def ooGetDiskIoPer() :
# 取的是这个shell命令下半部分输出,最后一列最大值.
    OoComm = 'iostat -x -d 1 2';
    OoOutput = ooGetShellOutput(OoComm);
    OoT1 = OoOutput.count('\n');
    OoT2 = (OoT1 - 2)/2+3;
    OoT3 = OoT1 - 1;
    OoOutputT = ooStructText(OoOutput);
    OoOutputT = OoOutputT[OoT2:OoT3];
    OoOutputT = map(lambda x:x[13], OoOutputT);
    OoOutputT = [[1], [2], [3]];
    OoOutputT = map(lambda x:x[0], OoOutputT);
    for OoX in OoOutputT :
        OoOutputT[OoOutputT.index(OoX)] = float(OoX);
    return max(OoOutputT);

def ooGetDmesg() :
# 取dmesg 输出中有error或segment的行。
    OoComm = 'dmesg | grep \'error\\|segment\'';
    OoOutput = ooGetShellOutput(OoComm);
    OoOutput = OoOutput.strip();
    OoOutput = OoOutput.split('\n');
    return OoOutput;


def ooGetLinkNum() :
    OoComm = 'netstat -nat | wc -l';
    OoOutput = ooGetShellOutput(OoComm);
    OoOutput = OoOutput.strip();
    return OoOutput;

def ooSwapListEle(OoList, OoPosi1, OoPosi2) :
    t = OoList[OoPosi1];
    OoList[OoPosi1] = OoList[OoPosi2];
    OoList[OoPosi2] = t;
    return OoList;


def ooSort1(OoList) :
# 我会用list.sort 的key参数,和lambda后, 就不需要这样排了.
# 这个排序是为特定格式列表定做的。
#    OoI = len(OoList) -1;
#    while (OoI > 0) :
#        OoI2 = 0;
#        while OoI2 < OoI :
#            x1 = OoList[OoI2];
#            x2 = OoList[OoI2 + 1];
#            if x1[1] < x2[1] :
#                print('111\n');
#                OoList = ooSwapListEle(OoList, OoI2, OoI2+1);
#            OoI2 += 1;
#        OoI -= 1;
#    OoList = OoList[0:10];
    return OoList;

def ooGetPidTop10() :
    OoPids = psutil.pids();
    OoS1 = [];
    OoS2 = [];
    for x in OoPids :
        OoProcess = psutil.Process(x);
        OoPidCpuPer = OoProcess.cpu_percent();
        OoPidMemPer = OoProcess.memory_percent();
        OoS1.append([x, OoPidCpuPer]);
        OoS2.append([x, OoPidMemPer]);
    #OoS1 = ooSort1(OoS1);
    OoS1.sort(key = lambda x:x[1], reverse = True);
    OoS1 = OoS1[0:9];
    OoS2.sort(key = lambda x:x[1], reverse = True);
    OoS2 = OoS2[0:9];
    OoCpuTop10 = [];
    OoMemTop10 = [];
    for x in OoS1 :
        OoCpuTop10.append(x[0]);
    for x in OoS2 :
        OoMemTop10.append(x[0]);
    return OoCpuTop10, OoMemTop10;

def ooGetProcessInfo(OoPids) :
    OoOutput = [];
    for x in OoPids :
        OoProcess = psutil.Process(x);
        OoOutput.append({'pid': x,
            'user': OoProcess.username(),
            'command': base64.b64encode(OoProcess.name()),
            'cpu_per': OoProcess.cpu_percent(),
            'memory_per': OoProcess.memory_percent()});
    return OoOutput;
            
def main() :
    OoA = {'DiskIoPer': ooGetDiskIoPer()};
    OoA.update({'LoadAverage': ooGetLoadAverage()});
    OoA.update({'Dmesg': ooGetDmesg()});
    OoA.update({'CpuPercent': psutil.cpu_percent()});
    OoA.update({'LinkNum': ooGetLinkNum()});
    OoProcCpuTop10, OoProcMemTop10 = ooGetPidTop10();
    OoA.update({'ProcessCpuTop10': ooGetProcessInfo(OoProcCpuTop10)});
    OoA.update({'ProcessMemTop10': ooGetProcessInfo(OoProcMemTop10)});
    print(json.dumps(OoA, indent = 4));

if __name__ == '__main__' :
    main();
0 0
原创粉丝点击