机器信息采集脚本(python)目录一、做什么的?..................................................................................................2二、怎么做?.....................................................................................................4(1)、依赖的库.........................................................................................4(2)、命令行解析模块optparse..................................................................4(3)windows系统信息................................................................................4(4)Linux系统信息....................................................................................74.1cpu信息..........................................................................................74.2network信息...................................................................................94.3存储信息.......................................................................................10(5)数据库信息.......................................................................................11(6)已经测试环境....................................................................................117.SunOSsunv440不支持............................................................................12标签:脚本,python,系统管理员,命令行,解析器,操作系统源代码位置:(希望大家能多多star收藏和fork改进程序)一、做什么的?(1)主要用于采集服务器的相关信息,提供两种交互方式,一种是将服务器信息汇总至xml文件中,便于软件开发者使用(图1);另一种方式通过命令行交互的方式,通过输入参数信息查询相关信息(图2)。图1图2(2)主要功能uname:操作系统版本、型号、处理器、机器名等CPU:型号、数量、使用率等network:网卡信息、MAC、IP、子网掩码、网络I/O等memory:内存大小、使用率、可用大小等存储:类型、大小、使用情况、磁盘I/O等数据库版本和安装路径:Mysql、oracle、sqlserver、sybase、db2二、怎么做?(1)、依赖的库psutil库下载地址:系统需要安装WMI库下载地址:这个库在安装之前要安装pywin32(2)、命令行解析模块optparse功能强大,且易于使用,可以方便地生成标准的、符合Unix/Posix规范的命令行说明。文档说明中文翻译:(英语水平有限)(3)windows系统信息WMI最初于1998年作为一个附加组件与WindowsNT4.0ServicePack4一起发行,是内置在Windows2000、WindowsXP和WindowsServer2003系列操作系统中核心的管理支持技术。基于由DistributedManagementTaskForce(DMTF)所监督的业界标准,WMI是一种规范和基础结构,通过它可以访问、配置、管理和监视几乎所有的Windows资源。大多用户习惯于使用众多的图形化管理工具来管理Windows资源,在WMI之前这些工具都是通过Win32应用程序编程接口(ApplicationProgrammingInterfaces,API)来访问和管理Windows资源的。只要你熟悉系统编程你就知道API有多么重要。但是大多数脚本语言都不能直接调用Win32API,WMI的出现使得系统管理员可以通过一种简便的方法即利用常见的脚本语言实现常用的系统管理任务。利用WMI需要和脚本如WSH和VBScript结合起来,可以实现的功能大家可以看微软的MSDN文档。因此基本上windows系统能表现出来,你都可以通过这个模块获取,具体的可参考下面代码:#!/usr/bin/envpython#-*-coding:utf-8-*-try:importwmiimportwin32apiexceptImportError:wmi=Noneimportsys,platformimportsubprocessimportosdefget_system_info(c,sys):ifsys==Windows:forsysinc.Win32_OperatingSystem():printVersion:\t%s%sys.Caption.encode(GBK)printVernum:\t%s%sys.BuildNumberdefget_memory_info(c,sys):ifsys==Windows:formeminc.Win32_MemoryArray():print'\t'+str(mem.Caption)+'\t'+str(mem.Name)cs=c.Win32_ComputerSystem()pfu=c.Win32_PageFileUsage()MemTotal=int(cs[0].TotalPhysicalMemory)/1024/1024printTotalPhysicalMemory:+'\t'+str(MemTotal)+M#tmpdict[MemFree]=int(sys[0].FreePhysicalMemory)/1024SwapTotal=int(pfu[0].AllocatedBaseSize)printSwapTotal:+'\t'+str(SwapTotal)+M#tmpdict[SwapFree]=int(pfu[0].AllocatedBaseSize-pfu[0].CurrentUsage)defget_disk_info(c,sys,infolist):ifsys==Windows:tmpdict=dict()tmplist=list()forphysical_diskinc.Win32_DiskDrive():ifphysical_disk.Size:tmpdict[disk]=str(physical_disk.Caption)tmpdict[size]=str(long(physical_disk.Size)/1024/1024/1024)+Gtmpdict[dev]=str(physical_disk.MediaType)tmplist.append(tmpdict)printtmpdict[dev]+:\t+tmpdict[disk]+':\t'+tmpdict[size]infolist.append(tmplist)defget_cpu_info(c,sys,infolist):ifsys==Windows:tmplist=list()tmpdict=dict()tmpdict[CpuCores]=0forcpuinc.Win32_Processor():tmpdict[modelname]=cpu.Nametry:tmpdict[CpuCores]=cpu.NumberOfCoresexcept:tmpdict[CpuCores]+=1tmpdict[CpuClock]=cpu.MaxClockSpeedprint'CpuType:\t'+str(tmpdict[modelname])print'CpuCores:\t'+str(tmpdict[CpuCores])tmplist.append(tmpdict)#infolist.append(tmplist)returntmplistdefget_network_info(c,sys,infolist):ifsys==Windows:tmplist=list()forinterfaceinc.Win32_NetworkAdapterConfiguration(IPEnabled=1):tmpdict=dict()tmpdict[Description]=interface.Descriptiontmpdict[IPAddress]=interface.IPAddress[0]tmpdict[IPSubnet]=interface.IPSubnet[0]tmpdict[MAC]=interface.MACAddresstmplist.append(tmpdict)foriintmplist:printi[Description]print'\t'+MAC:+'\t'+i[MAC]print'\t'+IPAddress:+'\t'+i[IPAddress]print'\t'+IPSubnet:+'\t'+i[IPSubnet]infolist.append(tmplist)forinterfacePerfTCPinc.Win32_PerfRawData_Tcpip_TCPv4():print'TCPConnect:\t'+str(interfacePerfTCP.ConnectionsEstablished)defget_Proceess_cmd(c,process_name):cmd=forprocessinc.Win32_Process():temp=unicode(process.CommandLine)name=process.Nameifname.find(process_name)=0:cmd=tempreturncmddefget_info(cmd):p=subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=False)returnp.communicate()[0].split(\n)[0]if__name__==__main__:sys=platform.system()infolist=list()c=wmi.WMI()(4)Linux系统信息4.1cpu信息在linux系统中,提供了proc文件系统显示系统的软硬件信息.CPU的信息在启动的过程中被装载到虚拟目录/proc下的cpuinfo文件中,我们可以通过cat/proc/cpuinfo查看一下:这样我们只需要通过分析这个文件来获取cpu的相关信息,代码如下:efget_cpu_info(sys,infolist):cpuinfo=d