收集主机信息,包括:

1、主机名:hostname

2、IP地址:ip

3、操作系统版本:osver

4、服务器厂商:vendor

5、服务器型号:product

6、服务器序列号:sn

7、cpu型号:cpu_module

8、cpu核心数量:cpu_num

9、内存大小


收集IP信息

[root@133systeminformation]#vimsysinformation.pyfromsubprocessimportPopen,PIPEdefgetIfconfig():p=Popen(['ifconfig'],stdout=PIPE)data=p.stdout.read()returndatadefgetDmi():p=Popen(['dmidecode'],stdout=PIPE)data=p.stdout.read()returndatadefparseData(data):parsed_data=[]new_line=''data=[iforiindata.split('\n')ifi]forlineindata:ifline[0].strip():parsed_data.append(new_line)new_line=line+'\n'else:new_line+=line+'\n'parsed_data.append(new_line)returnparsed_datadefparseIfconfig(parsed_data):dic={}tuple_addr=('lo','vir','vnet','em3','em4')parsed_data=[iforiinparsed_dataifiandnoti.startswith('tuple_addr')]forlinesinparsed_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']=[devname,ipaddr,macaddr]returndicif__name__=="__main__":data=getIfconfig()parsed_data=parseData(data)printparseIfconfig(parsed_data)[root@133systeminformation]#pythonsysinformation.py{'ip':['br1','112.65.140.133','A4:BA:DB:20:93:23']}



收集System Information信息

[root@133systeminformation]#vimsysinformation.pyreturndatadefparseData(data):parsed_data=[]new_line=''data=[iforiindata.split('\n')ifi]forlineindata:ifline[0].strip():parsed_data.append(new_line)new_line=line+'\n'else:new_line+=line+'\n'parsed_data.append(new_line)returnparsed_datadefparseIfconfig(parsed_data):dic={}tuple_addr=('lo','vir','vnet','em3','em4')parsed_data=[iforiinparsed_dataifiandnoti.startswith(tuple_addr)]forlinesinparsed_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']=devname,ipaddr,macaddrreturndicdefparseDmi(parsed_data):dic={}parsed_data=[iforiinparsed_dataifi.startswith('SystemInformation')]returnparsed_dataif__name__=="__main__":data_ip=getIfconfig()parsed_data_ip=parseData(data_ip)printparseIfconfig(parsed_data_ip)data_dmi=getDmi()parsed_data_dmi=parseData(data_dmi)printparseDmi(parsed_data_dmi)[root@133systeminformation]#pythonsysinformation.py#systeminformation是一个只有一个元素的大的列表{'ip':('br1','112.65.140.133','A4:BA:DB:20:93:23')}['SystemInformation\n\tManufacturer:DellInc.\n\tProductName:PowerEdgeR710\n\tVersion:NotSpecified\n\tSerialNumber:4HBDT2X\n\tUUID:4C4C4544-0048-4210-8044-B4C04F543258\n\tWake-upType:PowerSwitch\n\tSKUNumber:NotSpecified\n\tFamily:NotSpecified\n']


[root@133systeminformation]#vimsysinformation.pyreturndatadefparseData(data):parsed_data=[]new_line=''data=[iforiindata.split('\n')ifi]forlineindata:ifline[0].strip():parsed_data.append(new_line)new_line=line+'\n'else:new_line+=line+'\n'parsed_data.append(new_line)returnparsed_datadefparseIfconfig(parsed_data):dic={}tuple_addr=('lo','vir','vnet','em3','em4')parsed_data=[iforiinparsed_dataifiandnoti.startswith(tuple_addr)]forlinesinparsed_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']=devname,ipaddr,macaddrreturndicdefparseDmi(parsed_data):dic={}parsed_data=[iforiinparsed_dataifi.startswith('SystemInformation')]returnparsed_data[0]#把大的列表转为一个字符串if__name__=="__main__":data_ip=getIfconfig()parsed_data_ip=parseData(data_ip)printparseIfconfig(parsed_data_ip)data_dmi=getDmi()parsed_data_dmi=parseData(data_dmi)printparseDmi(parsed_data_dmi)[root@133systeminformation]#pythonsysinformation.py{'ip':('br1','112.65.140.133','A4:BA:DB:20:93:23')}SystemInformation#把大的列表转为一个字符串,结果如下:Manufacturer:DellInc.ProductName:PowerEdgeR710Version:NotSpecifiedSerialNumber:4HBDT2XUUID:4C4C4544-0048-4210-8044-B4C04F543258Wake-upType:PowerSwitchSKUNumber:NotSpecifiedFamily:NotSpecified

defparseDmi(parsed_data):dic={}parsed_data=[iforiinparsed_dataifi.startswith('SystemInformation')]returnparsed_data[0].split('\n')#使用\n作为切割符号,结果是列表,有很多元素,而不是一个元素[root@133systeminformation]#pythonsysinformation.py{'ip':('br1','112.65.140.133','A4:BA:DB:20:93:23')}['SystemInformation','\tManufacturer:DellInc.','\tProductName:PowerEdgeR710','\tVersion:NotSpecified','\tSerialNumber:4HBDT2X','\tUUID:4C4C4544-0048-4210-8044-B4C04F543258','\tWake-upType:PowerSwitch','\tSKUNumber:NotSpecified','\tFamily:NotSpecified',''][root@133systeminformation]##使用[1:]丢弃列表第一个元素:'SystemInformation'defparseDmi(parsed_data):dic={}parsed_data=[iforiinparsed_dataifi.startswith('SystemInformation')]returnparsed_data[0].split('\n')[1:][root@133systeminformation]#pythonsysinformation.py{'ip':('br1','112.65.140.133','A4:BA:DB:20:93:23')}['\tManufacturer:DellInc.','\tProductName:PowerEdgeR710','\tVersion:NotSpecified','\tSerialNumber:4HBDT2X','\tUUID:4C4C4544-0048-4210-8044-B4C04F543258','\tWake-upType:PowerSwitch','\tSKUNumber:NotSpecified','\tFamily:NotSpecified','']#使用ifi去掉最后一个空元素‘’,使用dict函数将列表元素转换为字典defparseDmi(parsed_data):dic={}parsed_data=[iforiinparsed_dataifi.startswith('SystemInformation')]parsed_data=[iforiinparsed_data[0].split('\n')[1:]ifi]returndict([i.strip().split(':')foriinparsed_data])[root@133systeminformation]#pythonsysinformation.py#输出全为字典元素,key-value,然后把指定的key赋值给需要的key即可输出value{'ip':('br1','112.65.140.133','A4:BA:DB:20:93:23')}{'SKUNumber':'NotSpecified','UUID':'4C4C4544-0048-4210-8044-B4C04F543258','Family':'NotSpecified','SerialNumber':'4HBDT2X','Version':'NotSpecified','ProductName':'PowerEdgeR710','Wake-upType':'PowerSwitch','Manufacturer':'DellInc.'}#dic['vender']=dmi_dic['Manufacturer']这是把dmi_dic字典key和valueManufacturer:DellInc.赋值给字典给dic字典的vender,其它同理,最后输出dic,即输出三个keyvalue的字典dic内容defparseDmi(parsed_data):dic={}parsed_data=[iforiinparsed_dataifi.startswith('SystemInformation')]parsed_data=[iforiinparsed_data[0].split('\n')[1:]ifi]dmi_dic=dict([i.strip().split(':')foriinparsed_data])dic['vender']=dmi_dic['Manufacturer']dic['product']=dmi_dic['ProductName']dic['sn']=dmi_dic['SerialNumber']returndic[root@133systeminformation]#pythonsysinformation.py{'ip':('br1','112.65.140.133','A4:BA:DB:20:93:23')}{'vender':'DellInc.','product':'PowerEdgeR710','sn':'4HBDT2X'}#发现value前面有空格,使用strip()删除空格defparseDmi(parsed_data):dic={}parsed_data=[iforiinparsed_dataifi.startswith('SystemInformation')]parsed_data=[iforiinparsed_data[0].split('\n')[1:]ifi]dmi_dic=dict([i.strip().split(':')foriinparsed_data])dic['vender']=dmi_dic['Manufacturer'].strip()dic['product']=dmi_dic['ProductName'].strip()dic['sn']=dmi_dic['SerialNumber'].strip()returndic[root@133systeminformation]#pythonsysinformation.py{'ip':('br1','112.65.140.133','A4:BA:DB:20:93:23')}{'vender':'DellInc.','product':'PowerEdgeR710','sn':'4HBDT2X'}


下面是收集到所有的信息,以key value的形式保存在字典中

catsysinformation.py#!/usr/bin/envpythonfromsubprocessimportPopen,PIPEdefgetIfconfig():p=Popen(['ifconfig'],stdout=PIPE)data=p.stdout.read()returndatadefgetDmi():p=Popen(['dmidecode'],stdout=PIPE)data=p.stdout.read()returndatadefparseData(data):parsed_data=[]new_line=''data=[iforiindata.split('\n')ifi]forlineindata:ifline[0].strip():parsed_data.append(new_line)new_line=line+'\n'else:new_line+=line+'\n'parsed_data.append(new_line)returnparsed_datadefparseIfconfig(parsed_data):dic={}tuple_addr=('lo','vir','vnet','em3','em4')parsed_data=[iforiinparsed_dataifiandnoti.startswith(tuple_addr)]forlinesinparsed_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']=devname,ipaddr,macaddrreturndicdefparseDmi(parsed_data):dic={}parsed_data=[iforiinparsed_dataifi.startswith('SystemInformation')]parsed_data=[iforiinparsed_data[0].split('\n')[1:]ifi]dmi_dic=dict([i.strip().split(':')foriinparsed_data])dic['vender']=dmi_dic['Manufacturer'].strip()dic['product']=dmi_dic['ProductName'].strip()dic['sn']=dmi_dic['SerialNumber'].strip()returndic#获取主机名信息:/etc/sysconfig/networkdefgetHostname(f):withopen(f)asfd:forlineinfd:ifline.startswith('HOSTNAME'):hostname=line.split('=')[1].strip()breakreturn{'hostname':hostname}#获取OS版本信息:打开文件/etc/issuedefgetOSver(f):withopen(f)asfd:forlineinfd:osver=line.strip()breakreturn{'osver':osver}#获取cpu信息:/proc/cpuinfodefgetCpu(f):num=0withopen(f)asfd:forlineinfd:ifline.startswith('processor'):num+=1ifline.startswith('modelname'):cpu_model=line.split(':')[1].split()cpu_model=cpu_model[0]+''+cpu_model[-1]return{'cpu_num':num,'cpu_model':cpu_model}#获取内存信息:/proc/meminfodefgetMemory(f):withopen(f)asfd:forlineinfd:ifline.startswith('MemTotal'):mem=int(line.split()[1].strip())breakmem="%s"%int(mem/1024.0)+'M'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('/etc/sysconfig/network')osver=getOSver('/etc/issue')cpu=getCpu('/proc/cpuinfo')mem=getMemory('/proc/meminfo')dic.update(ip)dic.update(dmi)dic.update(hostname)dic.update(cpu)dic.update(mem)dic.update(osver)printdic[root@133systeminformation]#pythonsysinformation.py{'product':'PowerEdgeR710','osver':'CentOSrelease6.7(Final)','sn':'4HBDT2X','memory':'19976M','cpu_num':8,'ip':('br1','112.65.140.133','A4:BA:DB:20:93:23'),'vender':'DellInc.','hostname':'133','cpu_model':'Intel(R)2.00GHz'}


注:

mem="%s"%int(mem/1024.0)+'M'

%表示格式化字符串的格式符号。
%s,表示字符串
%d,表示整数的字符串
%x,表示16进制的字符串
%f,表示浮点数字符串


第二个%表示要格式化的对象。
这种方法可以进行类型转换。