#!/usr/bin/env python#encoding: utf-8

‘‘‘收集主机的信息:

主机名称、IP、系统版本、服务器厂商、型号、序列号、CPU信息、内存信息‘‘‘

from subprocess importPopen, PIPEimportos,sys‘‘‘获取 ifconfig 命令的输出‘‘‘

defgetIfconfig():

p= Popen([‘ifconfig‘], stdout =PIPE)

data=p.stdout.read()returndata‘‘‘获取 dmidecode 命令的输出‘‘‘

defgetDmi():

p= Popen([‘dmidecode‘], stdout =PIPE)

data=p.stdout.read()returndata‘‘‘根据空行分段落 返回段落列表‘‘‘

defparseData(data):

parsed_data=[]

new_line= ‘‘data= [i for i in data.split(‘\n‘) ifi]for line indata:ifline[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 ifi]‘‘‘根据输入的段落数据分析出ifconfig的每个网卡ip信息‘‘‘

defparseIfconfig(parsed_data):

dic={}

parsed_data= [i for i in parsed_data if not i.startswith(‘lo‘)]for lines inparsed_data:

line_list= lines.split(‘\n‘)

devname=line_list[0].split()[0]

macaddr= line_list[0].split()[-1]

ipaddr= line_list[1].split()[1].split(‘:‘)[1]breakdic[‘ip‘] =ipaddrreturndic‘‘‘根据输入的dmi段落数据 分析出指定参数‘‘‘

defparseDmi(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:] ifi]

dmi_dic= dict([i.strip().split(‘:‘) for i inparsed_data])

dic[‘vender‘] = dmi_dic[‘Manufacturer‘].strip()

dic[‘product‘] = dmi_dic[‘Product Name‘].strip()

dic[‘sn‘] = dmi_dic[‘Serial Number‘].strip()returndic‘‘‘获取Linux系统主机名称‘‘‘

defgetHostname():

with open(‘/etc/sysconfig/network‘) as fd:for line infd:if line.startswith(‘HOSTNAME‘):

hostname= line.split(‘=‘)[1].strip()break

return {‘hostname‘:hostname}‘‘‘获取Linux系统的版本信息‘‘‘

defgetOsVersion():

with open(‘/etc/issue‘) as fd:for line infd:

osver=line.strip()break

return {‘osver‘:osver}‘‘‘获取CPU的型号和CPU的核心数‘‘‘

defgetCpu():

num=0

with open(‘/proc/cpuinfo‘) as fd:for line infd:if line.startswith(‘processor‘):

num+= 1

if line.startswith(‘model name‘):

cpu_model= line.split(‘:‘)[1].strip().split()

cpu_model= cpu_model[0] + ‘ ‘ + cpu_model[2] + ‘ ‘ + cpu_model[-1]return {‘cpu_num‘:num, ‘cpu_model‘:cpu_model}‘‘‘获取Linux系统的总物理内存‘‘‘

defgetMemory():

with open(‘/proc/meminfo‘) as fd:for line infd:if line.startswith(‘MemTotal‘):

mem= int(line.split()[1].strip())breakmem= ‘%.f‘ % (mem / 1024.0) + ‘MB‘

return {‘Memory‘:mem}if __name__ == ‘__main__‘:

dic={}

data_ip=getIfconfig()

parsed_data_ip=parseData(data_ip)

ip=parseIfconfig(parsed_data_ip)

data_dmi=getDmi()

parsed_data_dmi=parseData(data_dmi)

dmi=parseDmi(parsed_data_dmi)

hostname=getHostname()

osver=getOsVersion()

cpu=getCpu()

mem=getMemory()

dic.update(ip)

dic.update(dmi)

dic.update(hostname)

dic.update(osver)

dic.update(cpu)

dic.update(mem)‘‘‘将获取到的所有数据信息并按简单格式对齐显示‘‘‘

for k,v indic.items():print ‘%-10s:%s‘ %(k, v)

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐