python收集 Python收集主機資訊

2021-10-13 08:02:21 字數 3204 閱讀 4944

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():

new_line = line + 『\n『

else:

new_line += line + 『\n『

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 

#獲取作業系統

def getosver(f):

with open(f) as fd:

for line in fd:

osver = line.strip()

break

return 

#獲取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 

#獲取記憶體大小

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 

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 收集系統資訊

收集主機的以下資訊,並以字典形式輸出。1 主機名 hostname 3 作業系統版本 osver 4 伺服器廠商 vendor 5 伺服器型號 product 6 伺服器序列號 sn 7 cpu型號 cpu model 8 cpu核數 cpu num 9 記憶體大小 memory 如下 vim co...

python常見報錯收集

1 error non utf 8 code starting with xbf in file 這是檔案編碼問題,在檔案的最上方加上注釋 encoding gbk.2 關於from,import的區別 引用大神的解釋 from import 從包裡把鑰匙拿出來,給我 import 把包給我 3.u...

Python不定參(收集引數 )

收集引數 不定參 的逆過程 不定參 可接受數量不固定的引數,擁有擴充套件的能力。對於那些傳入引數的數量不確定的程式有很重要的作用,但同時由於不定參可同時接受很多引數,這也帶來了隱患 引數不合法。要解決這個問題就需要使用斷言 assert 或者 try except 來增加對引數合法性的檢驗及引數不合...