使用Python收集獲取Linux系統主機資訊
阿新 • • 發佈:2019-01-25
使用 python 程式碼收集主機的系統資訊,主要:主機名稱、IP、系統版本、伺服器廠商、型號、序列號、CPU資訊、記憶體等系統資訊。
#!/usr/bin/env python
#encoding: utf-8
'''
收集主機的資訊:
主機名稱、IP、系統版本、伺服器廠商、型號、序列號、CPU資訊、記憶體資訊
'''
from subprocessimport
Popen, PIPE
import os,sys
''' 獲取 ifconfig 命令的輸出 '''
defgetIfconfig():
p = Popen(['ifconfig'],
stdout = PIPE)
data = p.stdout.read()
return
data
''' 獲取 dmidecode 命令的輸出 '''
defgetDmi ():
p = Popen(['dmidecode'],
stdout = PIPE)
data = p.stdout.read()
return
data
''' 根據空行分段落 返回段落列表'''
defparseData(data):
parsed_data = []
new_line =''
data = [ifor
iin 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 iin
parsed_dataif i]
''' 根據輸入的段落資料分析出ifconfig的每個網絡卡ip資訊 '''
defparseIfconfig(parsed_data):
dic = {}
parsed_data = [ifor
iin parsed_dataifnot
i.startswith('lo')]
for
lines in parsed_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]
break
dic['ip']
= ipaddr
return
dic
''' 根據輸入的dmi段落資料 分析出指定引數 '''
defparseDmi(parsed_data):
dic = {}
parsed_data = [ifor
iin parsed_dataif
i.startswith('System Information')]
parsed_data = [ifor
iin parsed_data[0].split('\n')[1:]if
i]
dmi_dic = dict([i.strip().split(':')for
iin parsed_data])
dic['vender']
= dmi_dic['Manufacturer'].strip()
dic['product']
= dmi_dic['Product Name'].strip()
dic['sn']
= dmi_dic['Serial Number'].strip()
return
dic
''' 獲取Linux系統主機名稱 '''
defgetHostname():
with
open('/etc/sysconfig/network')as
fd:
for
line in fd:
if
line.startswith('HOSTNAME'):
hostname = line.split('=')[1].strip()
break
return
{'hostname':hostname}
''' 獲取Linux系統的版本資訊 '''
defgetOsVersion():
with
open('/etc/issue')as
fd:
for
line in fd:
osver = line.strip()
break
return
{'osver':osver}
''' 獲取CPU的型號和CPU的核心數 '''
defgetCpu():
num =0
with
open('/proc/cpuinfo')as
fd:
for
line in fd:
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 in fd:
if
line.startswith('MemTotal'):
mem = int(line.split()[1].strip())
break
mem ='%.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 in dic.items():
print'%-10s:%s'
% (k, v)