国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

利用Python獲取操作系統信息實例

2020-01-04 17:24:19
字體:
來源:轉載
供稿:網友

前言

每一位運維人員都應該對自己所管理的機器配置很清楚,因為這對我們快速處理問題很有幫助,比如隨著業務增長,突然某些機器負載上漲的厲害,這時候要排查原因,除了從應用程序、架構上分析外,當前硬件性能的分析應該是必不可少的一環,今天我們將不用第三方模塊,用python自帶模塊和系統提供的運行信息來獲取我們需要的信息,這個腳本除了硬件外,還抓取了當前系統進程數和網卡流量功能,所以這個版本實現的功能基本對應了之前psutil實現的內容,多的不說了,直接貼代碼:

#!/usr/bin/env python from collections import OrderedDictfrom collections import namedtupleimport osimport globimport 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中字典是無序的,當然你也可以根據kye來排序,但用OrderedDict就可以直接生成有序字典,有序字典的順序只跟你添加的順序有關。

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

>>> from collections import namedtuple>>> data = namedtuple('data',['rx','tx'])>>> d = data(123,456)>>> print ddata(rx=123, tx=456)>>> print d.rx123

3、glob,在這行for device in glob.glob(‘/sys/block/*')用到了這個功能,它主要方法就是glob,它返回所有匹配的文件列表。

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

總結

以上就是利用python獲取操作系統信息的全部內容,利用python來獲取還是很方便實用,希望這篇文章對大家的學習和工作能有一定的幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 额尔古纳市| 楚雄市| 牙克石市| 澳门| 米脂县| 芜湖市| 巩留县| 东乡| 崇文区| 石家庄市| 深圳市| 和政县| 黔东| 拉孜县| 丹凤县| 甘肃省| 青阳县| 河池市| 手游| 彭州市| 阿鲁科尔沁旗| 定襄县| 神农架林区| 衢州市| 浠水县| 多伦县| 逊克县| 五常市| 望江县| 疏附县| 镇原县| 平泉县| 福州市| 湖南省| 武邑县| 黄浦区| 广饶县| 惠州市| 当雄县| 佛坪县| 南康市|