使用Python收集獲取Linux系統主機資訊

2021-08-09 02:13:52 字數 4286 閱讀 8507

使用 python **收集主機的系統資訊,主要:主機名稱、ip、系統版本、伺服器廠商、型號、序列號、cpu資訊、記憶體等系統資訊。

#!/usr/bin/env python

#encoding: utf-8

'''

收集主機的資訊:

主機名稱、ip、系統版本、伺服器廠商、型號、序列號、cpu資訊、記憶體資訊

'''from

subprocess

import

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 = [i

fori

indata.split(

'\n')if

i] forline

indata: if

line[

0].strip():

new_line = line +

'\n'

else:

new_line += line +

'\n'

return

[i foriin

parsed_data

ifi]

''' 根據輸入的段落資料分析出ifconfig的每個網絡卡ip資訊 '''

defparseifconfig

(parsed_data):

dic = {}

parsed_data = [i

fori

inparsed_data

ifnot

i.startswith(

'lo')]

forlines

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]

break

dic[

'ip'

] = ipaddr

return

dic

''' 根據輸入的dmi段落資料 分析出指定引數 '''

defparsedmi

(parsed_data):

dic = {}

parsed_data = [i

fori

inparsed_data

ifi.startswith(

'system information')]

parsed_data = [i

fori

inparsed_data[

0].split(

'\n')[1

:]ifi]

dmi_dic = dict([i.strip().split(

':')

fori

inparsed_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:

forline

infd: if

line.startswith(

'hostname'):

hostname = line.split(

'=')[

1].strip()

break

return

''' 獲取linux系統的版本資訊 '''

defgetosversion

():

with

open(

'/etc/issue')as

fd:

forline

infd:

osver = line.strip()

break

return

''' 獲取cpu的型號和cpu的核心數 '''

defgetcpu

():

num =0

with

open(

'/proc/cpuinfo')as

fd:

forline

infd: if

line.startswith(

'processor'):

num +=1

ifline.startswith(

'model name'):

cpu_model = line.split(

':')[

1].strip().split()

cpu_model = cpu_model[

0] +

' '+ cpu_model[

2] +

' '+ cpu_model[-1]

return

''' 獲取linux系統的總物理記憶體 '''

defgetmemory

():

with

open(

'/proc/meminfo')as

fd:

forline

infd: if

line.startswith(

'memtotal'):

mem = int(line.split()[

1].strip())

break

mem =

'%.f'

% (mem /

1024.0

) +' mb'

return 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)

''' 將獲取到的所有資料資訊並按簡單格式對齊顯示 '''

fork,v

indic.items():

print

'%-10s:%s'

% (k, v)

Android Log日誌AS使用及Linux輸出

1 log.v tag,列印那些最為瑣碎的,意義最小的日誌資訊。對應級別verbose,是android 日誌裡面級別最低的一種。2 log.d tag,列印一些除錯資訊,這些資訊對你除錯程式和分析問題應該是有幫助的。對應級別debug,比 verbose 高一級。3 log.i tag,列印一些比...

windows使用ubuntu啟動linux服務

有些服務只能在linux中策馬奔騰,但是公司配置windows電腦,因此在windows中安裝ubuntu服務,再在啟動的ubuntu中啟動linux服務 系統 win10 其他系統沒試過 安裝步驟 1.檢查 網路和internet是否開啟 應該關閉 伺服器,否則無法開啟windows商店 2.在w...

windows使用ubuntu啟動linux服務

有些服務只能在linux中策馬奔騰,但是公司配置windows電腦,因此在windows中安裝ubuntu服務,再在啟動的ubuntu中啟動linux服務 系統 win10 其他系統沒試過 安裝步驟 1.檢查 網路和internet是否開啟 應該關閉 伺服器,否則無法開啟windows商店 2.在w...