• 实现的功能

    搜集系统消息,有生产商,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收集系统信息的更多相关文章

  1. Linux下dmesg命令处理故障和收集系统信息的7种用法

    目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...

  2. python获取系统信息psutil

    python获取系统信息psutil:psutil获取系统cpu使用率的方法是cpu_percent(),其有两个参数,分别是interval和percpu,interval指定的是计算cpu使用率的 ...

  3. Python收集这些视频只是单纯的想做做壁纸,大家不要误会

    首先澄清一下,我用Python收集这些视频,绝不是想做别的什么,真的只是用来做动态壁纸,大家不要误会!我不是那样的人~ 这样的不过份吧 (这个动图看不看的到就看有没有缘分了 ) 阅读本文你需要准备 1 ...

  4. 使用 python 收集获取 Linux 系统主机信息

    使用 python 代码收集主机的系统信息,主要:主机名称.IP.系统版本.服务器厂商.型号.序列号.CPU信息.内存等系统信息. #!/usr/bin/env python #encoding: u ...

  5. 使用Python收集获取Linux系统主机信息

    爬虫代理IP由芝麻HTTP服务供应商提供 使用 python 代码收集主机的系统信息,主要:主机名称.IP.系统版本.服务器厂商.型号.序列号.CPU信息.内存等系统信息. #!/usr/bin/en ...

  6. Python: 收集所有命名参数

    有时候把Python函数调用的命名参数都收集到一个dict中可以更方便地做参数检查,或者直接由参数创建attribute等.更简单的理解就是def foo(*args, **kwargs): pass ...

  7. python收集jvm数据

    之前前辈用 java 写的收集 jvm 脚本, 不太方便组内小伙伴维护, 遂用 python 重写了 #!/usr/bin/env python # -*- coding: utf-8 -*- # F ...

  8. Python 收集主机信息

    写一个 python 脚本,收集以下信息 ( CentOS 6 ) : IP地址 <ip>    主机名 <hostname>    操作系统版本 <osver>  ...

  9. 通过Python收集MySQL MHA 部署及运行状态信息的功能实现

    一. 背景介绍 当集团的MySQL数据库实例数达到2000+.MHA集群规模数百个时,对MHA的及时.高效管理是DBA必须面对的一个挑战.MHA 集群 节点信息 和 运行状态 是管理的基础.本篇幅主要 ...

随机推荐

  1. 后端UI框架

    BootStrap EasyUI DWZ ExtJS

  2. Spoken English Practice(I really hate to give her up, oh ,I know, you should take her.)

    色:连读:                  红色:略读:               蓝色:浊化:               橙色:弱读     下划线_为浊化 口语蜕变(2017/7/10) 英 ...

  3. content: "\e600"

    w图标生成原理. <style> @font-face { font-family: iconfont-sm; src: url(//at.alicdn.com/t/font_143340 ...

  4. JUnit4.12 源码分析之Statement

    1. Statement 抽象类Statement作为命令模式的Command,只有一个方法 各种Runner作为命令模式中的Invoker,将发出各种Statement,来表示它们运行JUnit测试 ...

  5. 如何用Qt Creator输出helloworld

    0 引言:相比于MFC只要直接在VS上搭建,Qt的配置就相对复杂了,Qt新手上路,老司机绕道,记录下配置Qt的整个过程,直到最终用C++输出“hello world”. 搭建环境:Win10 + qt ...

  6. js-jquery-001-条形码概述

    一.概述 百度百科 条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符. 通用商品条形码一般由前缀部分.制造厂商代码.商品代码和校验码组成.商品 ...

  7. 【Spring Task】定时任务详解实例-@Scheduled

    Spring的任务调度,采用注解的形式 spring的配置文件如下,先扫描到任务的类,打开spirng任务的标签 <beans xmlns="http://www.springfram ...

  8. 3D游戏引擎中常见的三维场景管理方法

    对于一个有很多物体的3D场景来说,渲染这个场景最简单的方式就是用一个List将这些物体进行存储,并送入GPU进行渲染.当然,这种做法在效率上来说是相当低下的,因为真正需要渲染的物体应该是视椎体内的物体 ...

  9. php about session store db or cache

    PHP关于Session的配置: 在php.ini中配置为:session.name = PHPSESSID 在请求开始的时候,会话名称会被重置并存储到session.name配置项. 所以要想在不改 ...

  10. 转载SQL_trace 和10046使用

    SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法.本文就SQL_TRACE的使用作简单探讨,并 ...