利用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 相关文章推荐
Python的pycurl包用法简介
Nov 13 Python
浅谈Python的文件类型
May 30 Python
Python 模块EasyGui详细介绍
Feb 19 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
使用Python求解带约束的最优化问题详解
Feb 11 Python
Python实现RabbitMQ6种消息模型的示例代码
Mar 30 Python
Django数据库操作之save与update的使用
Apr 01 Python
Python实现JS解密并爬取某音漫客网站
Oct 23 Python
python 列表推导和生成器表达式的使用
Feb 01 Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 02 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 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 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
在Vue中使用echarts的方法
2018/02/05 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
python实现得到一个给定类的虚函数
2014/09/28 Python
Python实现栈的方法
2015/05/26 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
python闭包与引用以及需要注意的陷阱
2020/09/18 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
数控专业毕业生求职信
2014/06/12 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
介绍信格式
2015/01/30 职场文书
见习期个人总结
2015/03/05 职场文书
计划生育目标责任书
2015/05/09 职场文书
文艺委员竞选稿
2015/11/19 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js