Python收集主机信息

发布时间:2019-08-31 09:46:27编辑:auto阅读(1497)

    Python收集linux主机信息,需要安装dmidecode命令,yum -y install dmidecode

    #!/usr/bin/env python
    # coding=utf-8
     
    from subprocess import Popen, PIPE
     
    #获取ifconfig命令信息
    def getIfconfig():
        p = Popen(['ifconfig'], stdout=PIPE)
        data = p.stdout.read().decode()
        return data
     
    #获取dmidecode命令信息
    def getDmi():
        p = Popen(['dmidecode'], stdout=PIPE)
        data = p.stdout.read().decode()
        return data
     
    #处理data数据输出为list并去掉空
    def parseData(data):
        parsed_data = []
        new_line = ''
        data = [i for i in data.split('\n') if i]
        for line in data:
            if line[0].strip():
                parsed_data.append(new_line)
                new_line = line + '\n'
            else:
                new_line += line + '\n'
        parsed_data.append(new_line)
        return [i for i in parsed_data if i]
     
    #处理ifconfig数据并获取eth1的IP地址
    def parseIfocnfig(parsed_data):
        dic = {}
        parsed_data = [ i for i in parsed_data if i.startswith('eth1')]
        for lines in parsed_data:
            line_list = lines.split('\n')
            devname = line_list[0].split()[0]
            macaddr = line_list[2].split()[1]
            ipaddr = line_list[1].split()[1]
            break
        dic['ip'] = ipaddr
        return dic
     
    #处理dmidecode数据获取信息
    def paeseDmi(parsed_data):
        dic = {}
        parsed_data = [ i for i in parsed_data if i.startswith('System Information')]
        parsed_data = [i for i in parsed_data[0].split('\n')[1:] if i]
        dmi_dic = dict([i.strip().split(': ') for i in parsed_data])
        dic['vender'] = dmi_dic['Manufacturer']
        dic['product'] = dmi_dic['Product Name']
        dic['sn'] = dmi_dic['Serial Number'][:8]
        return dic
     
    #获取hostname
    def getHostname(f):
        with open(f) as fd:
            for line in fd:
                if line.startswith('HOSTNAME'):
                    hostname = line.split('=')[1].strip()
                    break
        return {'hostname': hostname}
     
    #获取操作系统
    def getOSver(f):
        with open(f) as fd:
            for line in fd:
                osver = line.strip()
                break
        return {'osver': osver}
     
    #获取CPU数
    def getCpu(f):
        num = 0
        with open(f) as fd:
            for line in fd:
                if line.startswith('processor'):
                    num += 1
                if line.startswith('model name'):
                    cpu_model = line.split(':')[1].split()
                    cpu_model = cpu_model[0]+' '+ cpu_model[3]+' '+ cpu_model[-1]
        return {'cpu_num': num, 'cpu_model': cpu_model}
     
    #获取内存大小
    def getMemory(f):
        with open(f) as fd:
            for line in fd:
                if line.startswith('MemTotal'):
                    mem = int(line.split()[1].strip())
                    break
        mem = "%s" % int((mem/1024.0))+'M'
        return {'memory': mem}
     
    def main():
        dic = {}
        ip = parseIfocnfig(parseData(getIfconfig()))
        dmi = paeseDmi(parseData(getDmi()))
        osver = getOSver('/etc/issue')
        hostname = getHostname('/etc/sysconfig/network')
        cpu = getCpu('/proc/cpuinfo')
        memory = getMemory('/proc/meminfo')
    #    lines = [ip, dmi, hostname, osver, cpu, memory]
    #    for i in lines:
    #        dic.update(i)
        dic.update(ip)
        dic.update(dmi)
        dic.update(hostname)
        dic.update(osver)
        dic.update(cpu)
        dic.update(memory)
        print(dic)
     
    if __name__ == '__main__':
        main()




关键字

上一篇: Python_反射

下一篇: python格式符