其实获取系统信息,如果使用python的psutil的模块,更加的简洁好用。自己写的这个脚本算是一个python练习。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#!/usr/bin/env python2.7 # -*- coding:utf-8 -*- import os
import subprocess
import re
import hashlib
#对字典取子集 def sub_dict(form_dict, sub_keys, default = None ):
return dict ([(k, form_dict.get(k.strip(), default)) for k in sub_keys.split( ',' )])
#读取cpuinfo信息 # dmidecode -t 4 def read_cpuinfo():
cpu_stat = []
with open ( '/proc/cpuinfo' , 'r' ) as f:
data = f.read()
for line in data.split( '\n\n' ):
cpu_stat.append(line)
return cpu_stat[ - 2 ]
#读取fdisk信息 def read_fdisk():
p = subprocess.Popen( 'fdisk -l' , stdout = subprocess.PIPE, shell = True )
out = p.communicate()[ 0 ]
info = []
for i in out.split( '\n\n' ):
for x in i.splitlines():
if x:
info.append(x)
return info
#读取dmidecode信息 def read_dmidecode():
p = subprocess.Popen( 'dmidecode -t 1' , stdout = subprocess.PIPE, shell = True )
return p.communicate()[ 0 ]
#读取ifconfig信息 def read_ifconfig():
p = subprocess.Popen( 'ifconfig' , stdout = subprocess.PIPE, shell = True )
return p.communicate()[ 0 ]
#返回cpu信息:CPU型号、颗数、核数 def get_cpuinfo(data):
cpu_info = {}
for i in data.splitlines():
k, v = [x.strip() for x in i.split( ':' )]
cpu_info[k] = v
cpu_info[ 'physical id' ] = str ( int (cpu_info.get( 'physical id' )) + 1 )
return sub_dict(cpu_info, 'model name,physical id,cpu cores' )
#返回每块硬盘大小 def get_diskinfo(data):
disk_info = {}
m_disk = re. compile (r '^Disk\s/dev' )
for i in data:
if m_disk.match(i):
i = i.split( ',' )[ 0 ]
k, v = [x for x in i.split( ':' )]
disk_info[k] = v
return disk_info
#返回硬件信息:品牌、型号 def get_dmiinfo(data):
dmi_info = {}
line_in = False
for line in data.splitlines():
if line.startswith( 'System Information' ):
line_in = True
continue
if line.startswith( '\t' ) and line_in:
k, v = [i.strip() for i in line.split( ':' )]
dmi_info[k] = v
else :
line_in = False
return sub_dict(dmi_info, 'Manufacturer,Product Name,Serial Number' )
#返回网卡及ip信息:网卡、IP址、MAC地址 def get_ipinfo(data):
data = (i for i in data.split( '\n\n' ) if i and not i.startswith( 'lo' ))
ip_info = []
ifname = re. compile (r '(eth[\d:]*|wlan[\d:]*)' )
ipaddr = re. compile (r '(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})){3}' )
macaddr = re. compile (r '[A-F0-9a-f:]{17}' )
for i in data:
x = {}
if ifname.match(i):
device = ifname.match(i).group()
x[ 'Adapter' ] = device
if macaddr.search(i):
mac = macaddr.search(i).group()
x[ 'MAC' ] = mac
if ipaddr.search(i):
ip = ipaddr.search(i).group()
x[ 'IP' ] = ip
else :
x[ 'IP' ] = None
ip_info.append(x)
return ip_info
#返回内存及swap大小 def get_meminfo():
mem_info = {}
with open ( '/proc/meminfo' , 'r' ) as f:
data = f.readlines()
for i in data:
k, v = [x.strip() for x in i.split( ':' )]
mem_info[k] = int (v.split()[ 0 ])
return sub_dict(mem_info, 'MemTotal,SwapTotal' )
#返回操作信息 def get_osinfo():
os_info = {}
i = os.uname()
os_info[ 'os_type' ] = i[ 0 ]
os_info[ 'node_name' ] = i[ 1 ]
os_info[ 'kernel' ] = i[ 2 ]
return os_info
#唯一标识符 def get_indentity(data):
match_serial = re. compile (r "Serial Number: .*" , re.DOTALL)
match_uuid = re. compile (r "UUID: .*" , re.DOTALL)
if match_serial.search(data):
serial = match_serial.search(data).group()
if match_uuid.search(data):
uuid = match_uuid.search(data).group()
if serial:
serial_md5 = hashlib.md5(serial).hexdigest()
return serial_md5
elif uuid:
uuid_md5 = hashlib.md5(uuid).hexdigest()
return uuid_md5
if __name__ = = "__main__" :
ipinfo = get_ipinfo(read_ifconfig())
dmiinfo = get_dmiinfo(read_dmidecode())
cpuinfo = get_cpuinfo(read_cpuinfo())
diskinfo = get_diskinfo(read_fdisk())
meminfo = get_meminfo()
osinfo = get_osinfo()
identity = get_indentity(read_dmidecode())
|
本文转自 li_qinshan 51CTO博客,原文链接:http://blog.51cto.com/share/1269078