機器信息采集腳本(python)_第1頁
機器信息采集腳本(python)_第2頁
機器信息采集腳本(python)_第3頁
機器信息采集腳本(python)_第4頁
機器信息采集腳本(python)_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、機器信息采集腳本(python)目錄一、做什么的?2二、怎么做?4(1)、依賴的庫4(2)、命令行解析模塊 optparse4(3)windows系統(tǒng)信息4(4)Linux系統(tǒng)信息74.1 cpu信息74.2 network信息94.3 存儲信息10(5)數(shù)據(jù)庫信息11(6)已經(jīng)測試環(huán)境117.SunOS sunv440 不支持12標簽:腳本,python,系統(tǒng)管理員,命令行,解析器,操作系統(tǒng)源代碼位置: (希望大家能多多star收藏和fork改進程序)一、做什么的?(1)主要用于采集服務(wù)器的相關(guān)信息,提供兩種交互方式,一種是將服務(wù)器信息匯總至xml文件中,便于軟件開發(fā)者使用(圖1);另一種方

2、式通過命令行交互的方式,通過輸入?yún)?shù)信息查詢相關(guān)信息(圖2)。 圖1圖2(2)主要功能· uname : 操作系統(tǒng)版本 、型號 、處理器、機器名等· CPU :型號 、數(shù)量 、使用率等· network : 網(wǎng)卡信息、MAC、IP、子網(wǎng)掩碼、網(wǎng)絡(luò)I/O等· memory : 內(nèi)存大小、使用率、可用大小等· 存儲 : 類型、大小、使用情況、磁盤I/O等· 數(shù)據(jù)庫版本和安裝路徑:Mysql、oracle、sqlserver、sybase、db2二、怎么做?(1)、依賴的庫psutil庫 下載地址:https:/pypi.python.or

3、g/pypi/psutilwindows系統(tǒng)需要安裝WMI庫 下載地址:/pypi/WMI/#downloads 這個庫在安裝之前要安裝pywin32(2)、命令行解析模塊 optparse功能強大,且易于使用,可以方便地生成標準的、符合Unix/Posix規(guī)范的命令行說明。文檔說明中文翻譯:(3)windows系統(tǒng)信息WMI 最初于1998年作為一個附加組件與 Windows NT 4.0 Service Pack 4 一起發(fā)行,是內(nèi)置在Windows 2000、 Windows XP和Windows Server 2003 系列操作系統(tǒng)中核心的管

4、理支持技術(shù)。基于由 Distributed Management Task Force (DMTF) 所監(jiān)督的業(yè)界標準,WMI是一種規(guī)范和基礎(chǔ)結(jié)構(gòu),通過它可以訪問、配置、管理和監(jiān)視幾乎所有的Windows資源。大多用戶習慣于使用眾多的圖形化管理工 具來管理Windows資源,在WMI之前這些工具都是通過 Win32應(yīng)用程序編程接口(Application ProgrammingInterfaces,API)來訪問和管理Windows資源的。只要你熟悉系統(tǒng)編程你就知道API有多么重要。但是大多數(shù)腳本 語言都不能直接調(diào)用Win32 API,WMI的出現(xiàn)使得系統(tǒng)管理員可以通過一種簡便的方法即利用常見

5、的腳本語言實現(xiàn)常用的系統(tǒng)管理任務(wù)。利用WMI需要和腳本如WSH和VBScript結(jié)合起來,可以實現(xiàn)的功能大家可以看微軟的MSDN文檔。因此基本上windows系統(tǒng)能表現(xiàn)出來,你都可以通過這個模塊獲取,具體的可參考下面代碼:#!/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系統(tǒng)信息4.1 cpu信息在linux系統(tǒng)中,提供了proc文件系統(tǒng)顯示系統(tǒng)的軟硬件信息.CPU的信息在啟動的過程中被裝載到虛擬目錄/proc下的cpuinfo文件中,我們可以通過cat /proc/cpuinfo查看一下:這樣我們只需要通過分析這個文件來獲取cpu的相關(guān)信息,代碼如下: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信息想實現(xiàn)一個類似ifconfig命令,查了一下資料沒有找到好的方法,所以干脆就直接直接調(diào)用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這個命令,但是它有一個權(quán)限:無法支持超過2TB的硬盤分區(qū),這個在當今情況下幾乎是不可能。那么就用第二種分區(qū)命令了parted,由于我只想知道分區(qū)和大小,所以就在命令后面加了個過濾。如下后面再通過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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論