運維天地-伺服器04-X86-PCServer記憶體資訊獲取
- 2020 年 4 月 2 日
- 筆記
01
PART
知識回顧
本篇文章,我們重點介紹伺服器"記憶體"資訊的獲取。
前期知識儲備和回顧,請參考以下文章
01)運維天地-伺服器01-X86-PCServer屬性介紹
02)運維天地-伺服器02-X86-PCServer資產資訊獲取
03)運維天地-伺服器02-X86-PCServer CPU資訊獲取
特別說明:本文的伺服器特指X86-PCServer硬體伺服器


02
PART
X86-PCServer 記憶體資訊獲取
A
獲取腳本
#!/usr/bin/python #-*- coding: utf-8 -*- #author: wangzhiguo #date: 2020.01.29 import commands class MemInfo(): def __init__(self): return def get_mem_type(self): status, output = commands.getstatusoutput("dmidecode -t memory | grep 'Type: DDR' | sort -u | awk '{print $2}'") mem_type = output.strip() return mem_type def get_mem_speed(self): status, output = commands.getstatusoutput("dmidecode -t memory | grep 'Configured Clock Speed:' | grep -v 'Configured Clock Speed: Unknown' | sort -u | awk '{print$4}'") mem_speed = output.strip() return mem_speed def get_mem_size(self): status, output = commands.getstatusoutput ("dmidecode -t memory | grep 'Size:' | grep -v 'Size: No Module Installed' | sort -u") output = output.split(":")[1].split() if output[1] == "MB": mem_size = int(output[0])/1024 return mem_size elif output[1] == "GB": mem_size = int(output[0]) return mem_size elif output[1] == "KB": mem_size = int(output[0])/1024/1024 return mem_size elif output[1] == "TB": mem_size = int(output[0])*1024 return mem_size else: mem_size = int(output[0]) return mem_size def get_mem_num(self): status, output = commands.getstatusoutput("dmidecode -t memory | grep 'Size:' | grep -v 'Size: No Module Installed' | wc -l") mem_num = output.strip() mem_num = int(mem_num) return mem_num def get_mem_slot_num(self): status, output = commands.getstatusoutput("dmidecode -t memory | grep 'Memory Device' | wc -l") mem_slot_num = output.strip() mem_slot_num = int(mem_slot_num) return mem_slot_num def get_all(self): mem_type = self.get_mem_type() mem_speed = self.get_mem_speed() mem_size = self.get_mem_size() mem_num = self.get_mem_num() mem_slot_num = self.get_mem_slot_num() return mem_type, mem_speed, mem_size, mem_num, mem_slot_num def main(): temp = MemInfo() print(temp.get_all()) if __name__ == '__main__': main()
B
獲取方法概述


- 記憶體資訊的獲取,其實就利用了dmidecode命令
- dmidecode -t momory
- 接下來就是字元串的處理(過濾、分割、拼接)