• 实现的功能

    搜集系统消息,有生产商,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. SharePoint PerformancePoint开发实例

    前言 由于工作的原因,有一段时间没有发新的随笔了,最近使用了SharePoint PerformancePoint做了一些报表,与大家分享经验. 本文完全原创,转载请说明出处,希望对大家有用. 阅读目 ...

  2. 【Python数据挖掘】决策树、随机森林、Bootsing、

    决策树的定义 决策树(decision tree)是一个树结构(可以是二叉树或非二叉树).其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别. ...

  3. glibc-2.23_malloc_consolidate_浅析

  4. 设计模式之Prototype模式

    通常我们会使用new 类名()的方法会去生成一个新的实例,但在开发过程中,有时候也会有"在不指定类名的前提下生成实例"的需求,那样,就只能根据现有实例来生成新的实例. 有三种情况, ...

  5. append和innerHTML的区别以及使用方法

    1.append jquery中的append的使用方式:$("#id").append("<a href='#'>test</a>") ...

  6. nginx.conf常用配置解析

    一.全局配置 user username groupname 运行用户及用户组 worker_processes auto 启动进程,通常设置成和cpu数量相等的一个数值,默认为1.可以设置为auto ...

  7. qemu网络虚拟化之数据流向分析二

    2016-09-27 上篇文章大致介绍了qemu网络虚拟化相关的数据结构,本篇就结合qemu-kvm源代码分析下各个数据结构是如何初始化以及建立联系的. 这里还是分为三个部分: 1.Tap设备区 2. ...

  8. Shiro出现的问题

    报错java.lang.IllegalArgumentException: Line argument must contain a key and a value.  Only one string ...

  9. 关于手机适配中的rem的学习随笔

    githup 下载地址 :https://github.com/comjustforfun/remformobile adaptivejs利用rem解决移动端页面开发的自适应问题 页面模板初始化的时候 ...

  10. Windows下IIS+PHP 5.2的安装与配置

    Windows下IIS+PHP 5.2的安装与配置   Windows下PHP的安装虽然简单,但如果不注意方法,仍然会让你头疼.此外,PHP 5.2版本与之前4.x版本也有一些不同,所以有必要记录一下 ...