­

運維天地-伺服器04-X86-PCServer記憶體資訊獲取

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

獲取方法概述

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