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

下载本文档

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

文档简介

1、机器信息采集脚本(python)目录一、做什么的?2二、怎么做?4(1)、依赖的库4(2)、命令行解析模块 optparse4(3)windows系统信息4(4)Linux系统信息74.1 cpu信息74.2 network信息94.3 存储信息10(5)数据库信息11(6)已经测试环境117.SunOS sunv440 不支持12标签:脚本,python,系统管理员,命令行,解析器,操作系统源代码位置: (希望大家能多多star收藏和fork改进程序)一、做什么的?(1)主要用于采集服务器的相关信息,提供两种交互方式,一种是将服务器信息汇总至xml文件中,便于软件开发者使用(图1);另一种方

2、式通过命令行交互的方式,通过输入参数信息查询相关信息(图2)。 图1图2(2)主要功能· uname : 操作系统版本 、型号 、处理器、机器名等· CPU :型号 、数量 、使用率等· network : 网卡信息、MAC、IP、子网掩码、网络I/O等· memory : 内存大小、使用率、可用大小等· 存储 : 类型、大小、使用情况、磁盘I/O等· 数据库版本和安装路径:Mysql、oracle、sqlserver、sybase、db2二、怎么做?(1)、依赖的库psutil库 下载地址:https:/pypi.python.or

3、g/pypi/psutilwindows系统需要安装WMI库 下载地址:/pypi/WMI/#downloads 这个库在安装之前要安装pywin32(2)、命令行解析模块 optparse功能强大,且易于使用,可以方便地生成标准的、符合Unix/Posix规范的命令行说明。文档说明中文翻译:(3)windows系统信息WMI 最初于1998年作为一个附加组件与 Windows NT 4.0 Service Pack 4 一起发行,是内置在Windows 2000、 Windows XP和Windows Server 2003 系列操作系统中核心的管

4、理支持技术。基于由 Distributed Management Task Force (DMTF) 所监督的业界标准,WMI是一种规范和基础结构,通过它可以访问、配置、管理和监视几乎所有的Windows资源。大多用户习惯于使用众多的图形化管理工 具来管理Windows资源,在WMI之前这些工具都是通过 Win32应用程序编程接口(Application ProgrammingInterfaces,API)来访问和管理Windows资源的。只要你熟悉系统编程你就知道API有多么重要。但是大多数脚本 语言都不能直接调用Win32 API,WMI的出现使得系统管理员可以通过一种简便的方法即利用常见

5、的脚本语言实现常用的系统管理任务。利用WMI需要和脚本如WSH和VBScript结合起来,可以实现的功能大家可以看微软的MSDN文档。因此基本上windows系统能表现出来,你都可以通过这个模块获取,具体的可参考下面代码:#!/usr/bin/env python# -*- coding: utf-8 -*-try:import wmiimport win32apiexcept ImportError:wmi = Noneimport sys,platformimport subprocessimport osdef get_system_info(c,sys):if sys = "

6、Windows":for sys in c.Win32_OperatingSystem():print "Version :t%s" % sys.Caption.encode( "GBK")print "Vernum :t%s" % sys.BuildNumberdef get_memory_info(c,sys):if sys = "Windows":for mem in c.Win32_MemoryArray():print 't' + str(mem.Caption) + '

7、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( sys0.FreePhysicalMemory)/1024SwapTotal = int(pfu

8、 0.AllocatedBaseSize)print "SwapTotal :" + 't' + str(SwapTotal) + "M"#tmpdict "SwapFree" = int( pfu0.AllocatedBaseSize - pfu0.CurrentUsage)def get_disk_info(c,sys,infolist):if sys = "Windows":tmpdict = dict()tmplist=list()for physical_disk in c.Win32_D

9、iskDrive():if physical_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)print tmpdict"dev" +":t"+tmpdict&quo

10、t;disk" + ' :t' + tmpdict"size" infolist.append(tmplist) def get_cpu_info(c,sys,infolist):if sys = "Windows":tmplist=list()tmpdict=dict()tmpdict "CpuCores" = 0for cpu in c.Win32_Processor(): tmpdict "model name" = cpu.Nametry:tmpdict "CpuCore

11、s" = cpu.NumberOfCoresexcept:tmpdict "CpuCores" += 1tmpdict "CpuClock" = cpu.MaxClockSpeed print 'CpuType :t' + str(tmpdict"model name")print 'CpuCores :t' + str(tmpdict"CpuCores")tmplist.append(tmpdict)#infolist.append(tmplist)return tmpl

12、istdef get_network_info(c,sys,infolist):if sys = "Windows":tmplist=list()for interface in c.Win32_NetworkAdapterConfiguration (IPEnabled=1):tmpdict=dict()tmpdict "Description" = interface.Descriptiontmpdict "IPAddress" = interface.IPAddress0 tmpdict "IPSubnet"

13、 = interface.IPSubnet0 tmpdict "MAC" = interface.MACAddresstmplist.append(tmpdict)for i in tmplist:print i"Description"print 't' + "MAC :" + 't' + i"MAC" print 't' + "IPAddress :" + 't' + i"IPAddress" print &

14、#39;t' + "IPSubnet :" + 't' + i"IPSubnet" infolist.append(tmplist)for interfacePerfTCP in c.Win32_PerfRawData_Tcpip_TCPv4():print 'TCP Connect :t' + str(interfacePerfTCP.ConnectionsEstablished)def get_Proceess_cmd(c,process_name):cmd = ""for process

15、in c.Win32_Process():temp = unicode(process.CommandLine)name = process.Nameif name.find(process_name) >= 0:cmd = tempreturn cmddef get_info(cmd):p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell= False)return municate() 0.split( "n")0 if _name_ = "_main_":sys = platform.

16、system()infolist = list()c = wmi.WMI ()(4)Linux系统信息4.1 cpu信息在linux系统中,提供了proc文件系统显示系统的软硬件信息.CPU的信息在启动的过程中被装载到虚拟目录/proc下的cpuinfo文件中,我们可以通过cat /proc/cpuinfo查看一下:这样我们只需要通过分析这个文件来获取cpu的相关信息,代码如下:ef get_cpu_info(sys,infolist):cpuinfo=dict()procinfo=dict()tempdict = dict()templist = list()if sys = "L

17、inux":''' Return the information in /proc/cpuinfoas a dictionary in the following format:cpu_info'proc0'=.cpu_info'proc1'=.'''nprocs = 0f = file( "/proc/cpuinfo",'r')while True :line = f.readline()if len(line) = 0:breakif not line.strip(

18、):# end of one processorcpuinfo 'proc %s' % nprocs = procinfonprocs=nprocs+ 1# Resetprocinfo=dict()else:if len(line.split( ':') = 2 :temp1 = line.split( ':')0 .strip()temp2 = line.split( ':')1 .strip()tempdicttemp1 = temp2print temp1+" : "+temp2else:procinfo

19、line.split( ':')0 .strip() = ''templist.append(tempdict)# infolist.append(tempdict)return templist4.2 network信息想实现一个类似ifconfig命令,查了一下资料没有找到好的方法,所以干脆就直接直接调用ifconfig。def get_network_info(sys1,infolist):if sys1 = 'Linux':tmplist=list()ethlist = get_info( 'ifconfig -s|grep -v

20、 Iface|grep -v lo|awk 'print $1'').split("n")ethInfsys = get_info( "lspci | grep Ethernet").split("n")i = 0for ethi in ethlist:if ethi != "":tmpdict = dict()tmpdict "Description" = ethInfsysi.split(":")2tmpdict "IPAddress&q

21、uot; = get_info('ifconfig %s | awk '/inet addr:/ 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

22、/ print $5 ''%(ethi)tmplist.append(tmpdict)i = i + 1for i in tmplist:print i"Description"print 't' + "MAC :" + 't' + i"MAC" print 't' + "IPAddress :" + 't' + i"IPAddress" print 't' + "IPSubnet :&qu

23、ot; + 't' + i"IPSubnet" infolist.append(tmplist) 4.3 存储信息其实我首先想到的是fdisk这个命令,但是它有一个权限:无法支持超过2TB的硬盘分区,这个在当今情况下几乎是不可能。那么就用第二种分区命令了parted,由于我只想知道分区和大小,所以就在命令后面加了个过滤。如下后面再通过hdparm获取挂载盘的一些其他信息,代码如下:def get_disk_info(sys,infolist):if sys = "Linux":tmplist=list()devlist = get_inf

24、o( "parted -l |grep Disk").split( "n")for dev in devlist:if dev != "":tmpdict = dict()tmpdict "dev" = dev.split() 1.split( ":")0 tmpdict "size" = dev.split()2 temp = get_info( "hdparm -I %s |awk '/Model Number:/'"%(tmpdict"dev")if temp != "":tmpdict "disk" = temp.split(":")1else:tmpdict "disk" = ""tmplist.append(tmpdict)print tmpdict"dev" +":t"+tmpdict"disk" + ' :t' + tmpdict"size" inf

温馨提示

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

评论

0/150

提交评论