利用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按照多个字符对字符串进行分割的方法
Mar 17 Python
浅析Python中元祖、列表和字典的区别
Aug 17 Python
Python实现PS图像调整之对比度调整功能示例
Jan 26 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
纯python实现机器学习之kNN算法示例
Mar 01 Python
Python Json模块中dumps、loads、dump、load函数介绍
May 15 Python
Python 做曲线拟合和求积分的方法
Dec 29 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
关于python中plt.hist参数的使用详解
Nov 28 Python
解决django中form表单设置action后无法回到原页面的问题
Mar 13 Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 04 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中随机显示图片的函数代码
2011/06/23 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
对textarea框的代码调试,而且功能上使用非常方便,酷
2006/06/30 Javascript
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
jquery datatable服务端分页
2016/08/31 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
Python pass 语句使用示例
2014/03/11 Python
爬山算法简介和Python实现实例
2014/04/26 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
pandas的object对象转时间对象的方法
2018/04/11 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
python中的decimal类型转换实例详解
2019/06/26 Python
美国时尚女装在线:Missguided
2016/12/03 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
什么是规则表达式
2012/05/03 面试题
总经理职责
2013/12/22 职场文书
食品安全检查制度
2014/02/03 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
军训心得体会范文(2016最新篇)
2016/01/11 职场文书
志愿者工作心得体会
2016/01/15 职场文书
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL
Python中如何处理常见报错
2022/01/18 Python
Elasticsearch 聚合查询和排序
2022/04/19 Python