利用Python獲取操作系統(tǒng)信息實例
前言
每一位運維人員都應(yīng)該對自己所管理的機器配置很清楚,因為這對我們快速處理問題很有幫助,比如隨著業(yè)務(wù)增長,突然某些機器負載上漲的厲害,這時候要排查原因,除了從應(yīng)用程序、架構(gòu)上分析外,當前硬件性能的分析應(yīng)該是必不可少的一環(huán),今天我們將不用第三方模塊,用python自帶模塊和系統(tǒng)提供的運行信息來獲取我們需要的信息,這個腳本除了硬件外,還抓取了當前系統(tǒng)進程數(shù)和網(wǎng)卡流量功能,所以這個版本實現(xiàn)的功能基本對應(yīng)了之前psutil
實現(xiàn)的內(nèi)容,多的不說了,直接貼代碼:
#!/usr/bin/env python from collections import OrderedDict from collections import namedtuple import os import glob import re def cpuinfo(): cpuinfo=OrderedDict() procinfo=OrderedDict() nprocs = 0 with open('/proc/cpuinfo') as f: for line in f: if not line.strip(): cpuinfo['proc%s' % nprocs] = procinfo nprocs=nprocs+1 procinfo=OrderedDict() else: if len(line.split(':')) == 2: procinfo[line.split(':')[0].strip()] = line.split(':')[1].strip() else: procinfo[line.split(':')[0].strip()] = '' return cpuinfo def meminfo(): meminfo=OrderedDict() with open('/proc/meminfo') as f: for line in f: meminfo[line.split(':')[0]] = line.split(':')[1].strip() return meminfo def netdevs(): with open('/proc/net/dev') as f: net_dump = f.readlines() device_data={} data = namedtuple('data',['rx','tx']) for line in net_dump[2:]: line = line.split(':') if line[0].strip() != 'lo': device_data[line[0].strip()] = data(float(line[1].split()[0])/(1024.0*1024.0), float(line[1].split()[8])/(1024.0*1024.0)) return device_data def process_list(): pids = [] for subdir in os.listdir('/proc'): if subdir.isdigit(): pids.append(subdir) return pids dev_pattern = ['sd.*','xv*'] def size(device): nr_sectors = open(device+'/size').read().rstrip('\n') sect_size = open(device+'/queue/hw_sector_size').read().rstrip('\n') return (float(nr_sectors)*float(sect_size))/(1024.0*1024.0*1024.0) def detect_devs(): for device in glob.glob('/sys/block/*'): for pattern in dev_pattern: if re.compile(pattern).match(os.path.basename(device)): print('Device:: {0}, Size:: {1} GiB'.format(device, size(device))) if __name__=='__main__': cpuinfo = cpuinfo() for processor in cpuinfo.keys(): print(cpuinfo[processor]['model name']) meminfo = meminfo() print('Total memory: {0}'.format(meminfo['MemTotal'])) print('Free memory: {0}'.format(meminfo['MemFree'])) netdevs = netdevs() for dev in netdevs.keys(): print('{0}: {1} MiB {2} MiB'.format(dev, netdevs[dev].rx, netdevs[dev].tx)) pids = process_list() print('Total number of running processes:: {0}'.format(len(pids))) detect_devs()
以下是腳本的解釋部分:
1、OrderedDict,這個功能是可以生成有序字典,大家都知道在python中字典是無序的,當然你也可以根據(jù)kye
來排序,但用OrderedDict
就可以直接生成有序字典,有序字典的順序只跟你添加的順序有關(guān)。
2、namedtuple,功能是可以給元組的索引起個名字,一般我們訪問元組,只能用索引去訪問,但如果給索引定義了名字,你就可以用定義的這個名字去訪問了,為方便大家理解,我們舉個栗子:
>>> from collections import namedtuple >>> data = namedtuple('data',['rx','tx']) >>> d = data(123,456) >>> print d data(rx=123, tx=456) >>> print d.rx 123
3、glob,在這行for device in glob.glob(‘/sys/block/*')
用到了這個功能,它主要方法就是glob
,它返回所有匹配的文件列表。
4、re.compile(pattern).match(os.path.basename(device)),這句是將正則表達式編譯為Pattern
對象,然后使用Pattern
匹配文本,獲得匹配結(jié)果,匹配成功返回真,無法匹配時將返回None。
總結(jié)
以上就是利用python獲取操作系統(tǒng)信息的全部內(nèi)容,利用python來獲取還是很方便實用,希望這篇文章對大家的學習和工作能有一定的幫助。
相關(guān)文章
Python3和PyCharm安裝與環(huán)境配置【圖文教程】
這篇文章主要介紹了Python3和PyCharm安裝與環(huán)境配置,結(jié)合圖文形式詳細分析了Python3和PyCharm的安裝、環(huán)境配置、測試命令及相關(guān)操作注意事項,需要的朋友可以參考下2020-02-02Python中模塊(Module)和包(Package)的區(qū)別詳解
這篇文章主要介紹了Python中模塊(Module)和包(Package)的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08wxPython繪圖模塊wxPyPlot實現(xiàn)數(shù)據(jù)可視化
這篇文章主要為大家詳細介紹了wxPython繪圖模塊wxPyPlot實現(xiàn)數(shù)據(jù)可視化,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11在Python中通過threading模塊定義和調(diào)用線程的方法
由于著名的GIL的存在,Python中雖然能創(chuàng)建多條線程,但卻不能同時執(zhí)行...anyway,這里我們還是來學習一下在Python中通過threading模塊定義和調(diào)用線程的方法2016-07-07Queue隊列中join()與task_done()的關(guān)系及說明
這篇文章主要介紹了Queue隊列中join()與task_done()的關(guān)系及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02MNIST數(shù)據(jù)集轉(zhuǎn)化為二維圖片的實現(xiàn)示例
這篇文章主要介紹了MNIST數(shù)據(jù)集轉(zhuǎn)化為二維圖片的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-01-01