利用Python获取操作系统信息实例


Posted in Python onSeptember 02, 2016

前言

每一位运维人员都应该对自己所管理的机器配置很清楚,因为这对我们快速处理问题很有帮助,比如随着业务增长,突然某些机器负载上涨的厉害,这时候要排查原因,除了从应用程序、架构上分析外,当前硬件性能的分析应该是必不可少的一环,今天我们将不用第三方模块,用python自带模块和系统提供的运行信息来获取我们需要的信息,这个脚本除了硬件外,还抓取了当前系统进程数和网卡流量功能,所以这个版本实现的功能基本对应了之前psutil实现的内容,多的不说了,直接贴代码:

#!/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中字典是无序的,当然你也可以根据kye来排序,但用OrderedDict就可以直接生成有序字典,有序字典的顺序只跟你添加的顺序有关。

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匹配文本,获得匹配结果,匹配成功返回真,无法匹配时将返回None。

总结

以上就是利用python获取操作系统信息的全部内容,利用python来获取还是很方便实用,希望这篇文章对大家的学习和工作能有一定的帮助。

Python 相关文章推荐
pycharm 使用心得(六)进行简单的数据库管理
Jun 06 Python
python实现的简单文本类游戏实例
Apr 28 Python
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
Python与R语言的简要对比
Nov 14 Python
Python操作MySQL模拟银行转账
Mar 12 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
Feb 19 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
Python3.8官网文档之类的基础语法阅读
Sep 04 Python
python APScheduler执行定时任务介绍
Apr 19 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 #Python
Linux下为不同版本python安装第三方库
Aug 31 #Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
Aug 30 #Python
分享Python开发中要注意的十个小贴士
Aug 30 #Python
Python将图片批量从png格式转换至WebP格式
Aug 22 #Python
利用Python批量生成任意尺寸的图片
Aug 29 #Python
Python自定义类的数组排序实现代码
Aug 28 #Python
You might like
PHP系统流量分析的程序
2006/10/09 PHP
php实现购物车功能(下)
2016/01/05 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
提高javascript效率 一次判断,而不要次次判断
2012/03/30 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
使用tensorflow实现AlexNet
2017/11/20 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
python一键去抖音视频水印工具
2018/09/14 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
python科学计算之numpy——ufunc函数用法
2019/11/25 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
JSP&Servlet技术面试题
2015/05/21 面试题
大学秋游活动方案
2014/02/11 职场文书
行政专员求职信范文
2014/05/03 职场文书
空气环保标语
2014/06/12 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电