利用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中global用法实例分析
Apr 30 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
python多线程之事件Event的使用详解
Apr 27 Python
浅析python参数的知识点
Dec 10 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
python字典改变value值方法总结
Jun 21 Python
python交易记录链的实现过程详解
Jul 03 Python
python实现读取excel文件中所有sheet操作示例
Aug 09 Python
Python 50行爬虫抓取并处理图灵书目过程详解
Sep 20 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
python多进程并发demo实例解析
Dec 13 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
Feb 20 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
Laravel5权限管理方法详解
2016/07/26 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
2016/12/16 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
Js实现复选框的全选、全不选反选功能代码实例
2020/02/28 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
Python 正则表达式的高级用法
2016/12/04 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
Python Selenium库的基本使用教程
2021/01/04 Python
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
2013年高中生自我评价
2013/10/23 职场文书
导师评语大全
2014/04/26 职场文书
小摄影师教学反思
2014/04/27 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
建筑安全责任书范本
2014/07/24 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
交通安全教育主题班会
2015/08/12 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技