用python收集系统信息
- 实现的功能
搜集系统消息,有生产商,CPU型号,核数,内存,主机名,发行版名称 - 可运行的系统
目前已在RHEL, Ubuntu, Archlinux上测试通过 - 获取不同发行版主机名逻辑判断思路分析
大家肯定都知道,RHEL的主机名配置文件和Ubuntu的不一样,可是Archlinux的和Ubuntu的又不一样,所以这里就将不同操作系统的主机名配置文件和操作系统的issue做了一个映射
主要是将不同系统的系统名和对应的配置文件及存放在一个字典[ os_type ]结构中,后续有需要可以再扩展,而下面的的逻辑代码则不需要改变[ parseCfg() ],从字典中循环取数据,如果取到则退出的配置文件
运行结果类似如下:
key: value
product: VMware Virtual Platform
modelName: Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz
totalMem: 1.5 GB
cpuCore: 2
vender: VMware, Inc.
hostName: archlinux.vsphere
distroName: Arch Linux
SN: VMware-56 4d b9 19 26 63 ad ae-41 f3 5c 3c 34 66 ec bd
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
''' 可以在多linux平台下的多种机器下工作,需要添加相应的键值对儿在os_type字典里面 '''
from subprocess import Popen, PIPE
# 定义操作系统主机名字段字典, 在获取不同类型主机名配置文件的时候使用
os_type = {'archlinux': ['Arch Linux', '/etc/hostname'],
'ubuntu': ['Ubuntu', '/etc/hostname'],
'CentOS release': ['CentOS release', '/etc/sysconfig/network']
}
def parseCfg(osName):
' 通过不同的主机名,返回对应的主机名的配置文件位置 '
for type in os_type:
if osName.startswith( os_type[type][0] ):
cfg = os_type[ type ][ 1 ]
return cfg
def getHostInfo(command):
''' @args: command 输入要运行的系统命令
@return: 返回一个长的字符串
'''
p = Popen([command], stdout=PIPE)
data = p.stdout.read()
return data
def parseHostInfo(data):
NEWLINE = '\n'
parsedData = []
eachSection = ''
''' regenerate a list, remove the NULL element
@args: data is a long string
@return: all of sections list
'''
data = [i for i in data.split('\n') if i]
for eachLine in data:
if eachLine[0].strip():
parsedData.append(eachSection)
eachSection = eachLine + NEWLINE
else:
eachSection = eachSection + eachLine + NEWLINE
parsedData.append(eachSection)
return [i for i in parsedData if i]
def parseIPInfo(parsedData):
dic = {}
data = [i for i in parsedData if i and not i.startswith('lo')]
for lines in data:
lineLst = lines.split('\n')
devname = lineLst[0].split(':')[0]
ipaddr = lineLst[1].split()[1]
macaddr = lineLst[3].split()[1]
dic[devname] = [ipaddr, macaddr]
return dic
def parseDMIInfo(parsedData):
'''
:param parsedData:
:return:
'''
dmi_result = {}
data = [i for i in parsedData if i.startswith('System Information')]
data = [i for i in data[0].split('\n')[1:] if i]
'生成一个大列表,每个元素也是一个列表,且仅有两个元素,所以下面可以直接生成一个字典数据结构'
l_list = [i.strip().split(':') for i in data]
sys_info_dic = dict(l_list)
dmi_result['vender'] = sys_info_dic['Manufacturer'].strip()
dmi_result['product'] = sys_info_dic['Product Name'].strip()
dmi_result['SN'] = sys_info_dic['Serial Number'].strip()
return dmi_result
def getDistroName():
with open('/etc/issue') as fd:
distroName = ' '.join(fd.read().strip().split()[:2])
return {'distroName': distroName}
def getHostname(fn, osVer):
with open(fn) as fd:
host = fd.read()
if osVer.startswith('Arch Linux') or osVer.startswith('Ubuntu'):
hostName = host.strip()
return {'hostName': hostName}
if osVer == 'CentOS release':
host = host.strip().split('\n')
for i in host:
if i.startswith('HOSTNAME'):
hostName = i.split('=')[1]
return {'hostName': hostName}
def getMeminfo():
with open('/proc/meminfo') as fd:
for eachLine in fd:
if eachLine.startswith('MemTotal'):
totalMem = eachLine.split(':')[1].strip()
totalMem = '%.1f' % (float(totalMem.split()[0]) / 1024.0 / 1024)
return {'totalMem': str(totalMem) + ' GB'}
def getCPUInfo():
with open('/proc/cpuinfo') as fd:
for eachLine in fd:
if eachLine.startswith('cpu cores'):
cpuCore = eachLine.split(':')[1].strip()
continue
if eachLine.startswith('model name'):
modelName = eachLine.split(':')[1].strip()
return {'cpuCore': cpuCore, 'modelName': modelName}
if __name__ == '__main__':
dic = {}
cfg = '/etc/sysconfig/network'
data = getHostInfo('dmidecode')
dmiLst = parseHostInfo(data)
' dmi info '
dmiInfo = parseDMIInfo(dmiLst)
memInfo = getMeminfo()
osVer = getDistroName()
osName = osVer['distroName']
cfg = parseCfg(osName)
hostInfo = getHostname(cfg, osName)
cpuInfo = getCPUInfo()
dic.update(dmiInfo)
dic.update(hostInfo)
dic.update(memInfo)
dic.update(osVer)
dic.update(cpuInfo)
print('%10s: %s' % ('key', 'value'))
for key in dic.items():
print('%10s: %s' % (key[0], key[1]))
用python收集系统信息的更多相关文章
- Linux下dmesg命令处理故障和收集系统信息的7种用法
目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...
- python获取系统信息psutil
python获取系统信息psutil:psutil获取系统cpu使用率的方法是cpu_percent(),其有两个参数,分别是interval和percpu,interval指定的是计算cpu使用率的 ...
- Python收集这些视频只是单纯的想做做壁纸,大家不要误会
首先澄清一下,我用Python收集这些视频,绝不是想做别的什么,真的只是用来做动态壁纸,大家不要误会!我不是那样的人~ 这样的不过份吧 (这个动图看不看的到就看有没有缘分了 ) 阅读本文你需要准备 1 ...
- 使用 python 收集获取 Linux 系统主机信息
使用 python 代码收集主机的系统信息,主要:主机名称.IP.系统版本.服务器厂商.型号.序列号.CPU信息.内存等系统信息. #!/usr/bin/env python #encoding: u ...
- 使用Python收集获取Linux系统主机信息
爬虫代理IP由芝麻HTTP服务供应商提供 使用 python 代码收集主机的系统信息,主要:主机名称.IP.系统版本.服务器厂商.型号.序列号.CPU信息.内存等系统信息. #!/usr/bin/en ...
- Python: 收集所有命名参数
有时候把Python函数调用的命名参数都收集到一个dict中可以更方便地做参数检查,或者直接由参数创建attribute等.更简单的理解就是def foo(*args, **kwargs): pass ...
- python收集jvm数据
之前前辈用 java 写的收集 jvm 脚本, 不太方便组内小伙伴维护, 遂用 python 重写了 #!/usr/bin/env python # -*- coding: utf-8 -*- # F ...
- Python 收集主机信息
写一个 python 脚本,收集以下信息 ( CentOS 6 ) : IP地址 <ip> 主机名 <hostname> 操作系统版本 <osver> ...
- 通过Python收集MySQL MHA 部署及运行状态信息的功能实现
一. 背景介绍 当集团的MySQL数据库实例数达到2000+.MHA集群规模数百个时,对MHA的及时.高效管理是DBA必须面对的一个挑战.MHA 集群 节点信息 和 运行状态 是管理的基础.本篇幅主要 ...
随机推荐
- 后端UI框架
BootStrap EasyUI DWZ ExtJS
- Spoken English Practice(I really hate to give her up, oh ,I know, you should take her.)
色:连读: 红色:略读: 蓝色:浊化: 橙色:弱读 下划线_为浊化 口语蜕变(2017/7/10) 英 ...
- content: "\e600"
w图标生成原理. <style> @font-face { font-family: iconfont-sm; src: url(//at.alicdn.com/t/font_143340 ...
- JUnit4.12 源码分析之Statement
1. Statement 抽象类Statement作为命令模式的Command,只有一个方法 各种Runner作为命令模式中的Invoker,将发出各种Statement,来表示它们运行JUnit测试 ...
- 如何用Qt Creator输出helloworld
0 引言:相比于MFC只要直接在VS上搭建,Qt的配置就相对复杂了,Qt新手上路,老司机绕道,记录下配置Qt的整个过程,直到最终用C++输出“hello world”. 搭建环境:Win10 + qt ...
- js-jquery-001-条形码概述
一.概述 百度百科 条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符. 通用商品条形码一般由前缀部分.制造厂商代码.商品代码和校验码组成.商品 ...
- 【Spring Task】定时任务详解实例-@Scheduled
Spring的任务调度,采用注解的形式 spring的配置文件如下,先扫描到任务的类,打开spirng任务的标签 <beans xmlns="http://www.springfram ...
- 3D游戏引擎中常见的三维场景管理方法
对于一个有很多物体的3D场景来说,渲染这个场景最简单的方式就是用一个List将这些物体进行存储,并送入GPU进行渲染.当然,这种做法在效率上来说是相当低下的,因为真正需要渲染的物体应该是视椎体内的物体 ...
- php about session store db or cache
PHP关于Session的配置: 在php.ini中配置为:session.name = PHPSESSID 在请求开始的时候,会话名称会被重置并存储到session.name配置项. 所以要想在不改 ...
- 转载SQL_trace 和10046使用
SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法.本文就SQL_TRACE的使用作简单探讨,并 ...