欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Python獲取操作系統(tǒng)信息實(shí)例

 更新時(shí)間:2016年09月02日 08:52:18   投稿:daisy  
作為一個(gè)運(yùn)維人員,經(jīng)常需要獲取系統(tǒng)的的各種信息,使用python會(huì)很方便幫助獲得,這篇文章運(yùn)用實(shí)例告訴大家如何利用Python來(lái)獲取操作系統(tǒng)的信息,有需要的可以參考借鑒。

前言

每一位運(yùn)維人員都應(yīng)該對(duì)自己所管理的機(jī)器配置很清楚,因?yàn)檫@對(duì)我們快速處理問(wèn)題很有幫助,比如隨著業(yè)務(wù)增長(zhǎng),突然某些機(jī)器負(fù)載上漲的厲害,這時(shí)候要排查原因,除了從應(yīng)用程序、架構(gòu)上分析外,當(dāng)前硬件性能的分析應(yīng)該是必不可少的一環(huán),今天我們將不用第三方模塊,用python自帶模塊和系統(tǒng)提供的運(yùn)行信息來(lái)獲取我們需要的信息,這個(gè)腳本除了硬件外,還抓取了當(dāng)前系統(tǒng)進(jìn)程數(shù)和網(wǎng)卡流量功能,所以這個(gè)版本實(shí)現(xiàn)的功能基本對(duì)應(yīng)了之前psutil實(shí)現(xiàn)的內(nèi)容,多的不說(shuō)了,直接貼代碼:

#!/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,這個(gè)功能是可以生成有序字典,大家都知道在python中字典是無(wú)序的,當(dāng)然你也可以根據(jù)kye來(lái)排序,但用OrderedDict就可以直接生成有序字典,有序字典的順序只跟你添加的順序有關(guān)。

2、namedtuple,功能是可以給元組的索引起個(gè)名字,一般我們?cè)L問(wèn)元組,只能用索引去訪(fǎng)問(wèn),但如果給索引定義了名字,你就可以用定義的這個(gè)名字去訪(fǎng)問(wèn)了,為方便大家理解,我們舉個(gè)栗子:

>>> 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/*')用到了這個(gè)功能,它主要方法就是glob,它返回所有匹配的文件列表。

4、re.compile(pattern).match(os.path.basename(device)),這句是將正則表達(dá)式編譯為Pattern對(duì)象,然后使用Pattern匹配文本,獲得匹配結(jié)果,匹配成功返回真,無(wú)法匹配時(shí)將返回None。

總結(jié)

以上就是利用python獲取操作系統(tǒng)信息的全部?jī)?nèi)容,利用python來(lái)獲取還是很方便實(shí)用,希望這篇文章對(duì)大家的學(xué)習(xí)和工作能有一定的幫助。

相關(guān)文章

  • pytest解讀一次請(qǐng)求多個(gè)fixtures及多次請(qǐng)求

    pytest解讀一次請(qǐng)求多個(gè)fixtures及多次請(qǐng)求

    這篇文章主要為大家介紹了一次請(qǐng)求多個(gè)fixtures,以及fixtures被多次請(qǐng)求的pytest官方解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • python 生成不重復(fù)的隨機(jī)數(shù)的代碼

    python 生成不重復(fù)的隨機(jī)數(shù)的代碼

    用的是篩選法,網(wǎng)上有解釋,簡(jiǎn)單的說(shuō) 就是先隨機(jī)生成一串?dāng)?shù)字,之后用下標(biāo)來(lái)判斷這些數(shù)字有沒(méi)有重復(fù),重復(fù)的就篩去
    2011-05-05
  • Python3和PyCharm安裝與環(huán)境配置【圖文教程】

    Python3和PyCharm安裝與環(huán)境配置【圖文教程】

    這篇文章主要介紹了Python3和PyCharm安裝與環(huán)境配置,結(jié)合圖文形式詳細(xì)分析了Python3和PyCharm的安裝、環(huán)境配置、測(cè)試命令及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • Python中模塊(Module)和包(Package)的區(qū)別詳解

    Python中模塊(Module)和包(Package)的區(qū)別詳解

    這篇文章主要介紹了Python中模塊(Module)和包(Package)的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • wxPython繪圖模塊wxPyPlot實(shí)現(xiàn)數(shù)據(jù)可視化

    wxPython繪圖模塊wxPyPlot實(shí)現(xiàn)數(shù)據(jù)可視化

    這篇文章主要為大家詳細(xì)介紹了wxPython繪圖模塊wxPyPlot實(shí)現(xiàn)數(shù)據(jù)可視化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 在Python中通過(guò)threading模塊定義和調(diào)用線(xiàn)程的方法

    在Python中通過(guò)threading模塊定義和調(diào)用線(xiàn)程的方法

    由于著名的GIL的存在,Python中雖然能創(chuàng)建多條線(xiàn)程,但卻不能同時(shí)執(zhí)行...anyway,這里我們還是來(lái)學(xué)習(xí)一下在Python中通過(guò)threading模塊定義和調(diào)用線(xiàn)程的方法
    2016-07-07
  • Queue隊(duì)列中join()與task_done()的關(guān)系及說(shuō)明

    Queue隊(duì)列中join()與task_done()的關(guān)系及說(shuō)明

    這篇文章主要介紹了Queue隊(duì)列中join()與task_done()的關(guān)系及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 解決python xlrd無(wú)法讀取excel文件的問(wèn)題

    解決python xlrd無(wú)法讀取excel文件的問(wèn)題

    今天小編就為大家分享一篇解決python xlrd無(wú)法讀取excel文件的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • python多進(jìn)程登錄遠(yuǎn)端服務(wù)器

    python多進(jìn)程登錄遠(yuǎn)端服務(wù)器

    這篇文章主要介紹了python多進(jìn)程登錄遠(yuǎn)端服務(wù)器,文章應(yīng)用實(shí)例簡(jiǎn)易的方式詳細(xì)講解python多進(jìn)程登錄遠(yuǎn)端服務(wù)器的相關(guān)資料,需要的朋友可以參考以下文章的具體內(nèi)容
    2021-10-10
  • MNIST數(shù)據(jù)集轉(zhuǎn)化為二維圖片的實(shí)現(xiàn)示例

    MNIST數(shù)據(jù)集轉(zhuǎn)化為二維圖片的實(shí)現(xiàn)示例

    這篇文章主要介紹了MNIST數(shù)據(jù)集轉(zhuǎn)化為二維圖片的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01

最新評(píng)論