机器信息采集脚本(python)_第1页
机器信息采集脚本(python)_第2页
机器信息采集脚本(python)_第3页
机器信息采集脚本(python)_第4页
机器信息采集脚本(python)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...wd......wd......wd...机器信息采集脚本〔python〕目录一、做什么的2二、怎么做4〔1〕、依赖的库4〔2〕、命令行解析模块optparse4〔3〕windows系统信息4〔4〕Linux系统信息74.1cpu信息74.2network信息94.3存储信息10〔5〕数据库信息11〔6〕已经测试环境117.SunOSsunv440不支持12标签:脚本,python,系统管理员,命令行,解析器,操作系统源代码位置:s://github/caidao/ugetinfo-1.0.0〔希望大家能多多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库下载地址:s:///pypi/psutilwindows系统需要安装WMI库下载地址:s:///pypi/WMI/#downloads这个库在安装之前要安装pywin32〔2〕、命令行解析模块optparse功能强大,且易于使用,可以方便地生成标准的、符合Unix/Posix标准的命令行说明。文档说明中文翻译::///caidaoqq/article/details/44706005〔英语水平有限〕〔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():print"Version:\t%s"%sys.Caption.encode("GBK")print"Vernum:\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/1024print"TotalPhysicalMemory:"+'\t'+str(MemTotal)+"M"#tmpdict["MemFree"]=int(sys[0].FreePhysicalMemory)/1024SwapTotal=int(pfu[0].AllocatedBaseSize)print"SwapTotal:"+'\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)+"G"tmpdict["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(processmandLine)name=process.Nameifname.find(process_name)>=0:cmd=tempreturncmddefget_info(cmd):p=subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=False)returnpmunicate()[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=dict()procinfo=dict()tempdict=dict()templist=list()ifsys=="Linux":'''Returntheinformationin/proc/cpuinfoasadictionaryinthefollowingformat:cpu_info['proc0']={...}cpu_info['proc1']={...}'''nprocs=0f=file("/proc/cpuinfo",'r')whileTrue:line=f.readline()iflen(line)==0:breakifnotline.strip():#endofoneprocessorcpuinfo['proc%s'%nprocs]=procinfonprocs=nprocs+1#Resetprocinfo=dict()else:iflen(line.split(':'))==2:temp1=line.split(':')[0].strip()temp2=line.split(':')[1].strip()tempdict[temp1]=temp2printtemp1+":"+temp2else:procinfo[line.split(':')[0].strip()]=''templist.append(tempdict)#infolist.append(tempdict)returntemplist4.2network信息想实现一个类似ifconfig命令,查了一下资料没有找到好的方法,所以干脆就直接直接调用ifconfig。defget_network_info(sys1,infolist):ifsys1=='Linux':tmplist=list()ethlist=get_info('ifconfig-s|grep-vIface|grep-vlo|awk\'{print$1}\'').split("\n")ethInfsys=get_info("lspci|grepEthernet").split("\n")i=0forethiinethlist:ifethi!="":tmpdict=dict()tmpdict["Description"]=ethInfsys[i].split(":")[2]tmpdict["IPAddress"]=get_info('ifconfig%s|awk\'/inetaddr:/{print$2}\''%(ethi)).split(":")[1]tmpdict["IPSubnet"]=get_info('ifconfig%s|awk\'/Mask/{print$4}\''%(ethi)).split(":")[1]tmpdict["MAC"]=get_info('ifconfig%s|awk\'/HWaddr/{print$5}\''%(ethi))tmplist.append(tmpdict)i=i+1foriintmplist:printi["Description"]print'\t'+"MAC:"+'\t'+i["MAC"]print'\t'+"IPAddress:"+'\t'+i["IPAddress"]print'\t'+"IPSubnet:"+'\t'+i["IPSubnet"]infolist.append(tmplist)4.3存储信息其实我首先想到的是fdisk这个命令,但是它有一个权限:无法支持超过2TB的硬盘分区,这个在当今情况下几乎是不可能。那么就用第二种分区命令了parted,由于我只想知道分区和大小,所以就在命令后面加了个过滤。如下后面再通过hdparm获取挂载盘的一些其他信息,代码如下:defget_disk_info(sys,infolist):ifsys=="Linux":tmplist=list()devlist=get_info("parted-l|grepDisk").split("\n")fordevindevlist:ifdev!="":tmpdict=dict()tmpdict["dev"]=dev.split()[1].split(":")[0]tmpdict["size"]=dev.split()[2]temp=get_info("hdparm-I%s|awk\'/ModelNumber:/\'"%(tmpdict["dev"]))iftemp!="":tmpdict["disk"]=temp.split(":")[1]else:tmpdict["disk"]=""tmplist.append(tmpdict)printtmpdict["dev"]+":\t"+tmpdict["disk"]+':\t'+tmpdict["size"]infolist.append(tmplist)〔5〕数据库信息原理其实很简单,每个数据库启动后都会有后台进程,只要能获取

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论