python執(zhí)行shell獲取硬件參數(shù)寫入mysql的方法
來源:易賢網(wǎng) 閱讀:1037 次 日期:2015-01-03 10:38:01
溫馨提示:易賢網(wǎng)小編為您整理了“python執(zhí)行shell獲取硬件參數(shù)寫入mysql的方法”,方便廣大網(wǎng)友查閱!

最近要獲取服務(wù)器各種參數(shù),包括cpu、內(nèi)存、磁盤、型號(hào)等信息。試用了Hyperic HQ、Nagios和Snmp,它們功能都挺強(qiáng)大的,但是于需求不是太符,亦或者太heavy。

于是乎想到用python執(zhí)行shell獲取這些信息,python執(zhí)行shell腳本有以下三種方法:

1. os.system()

代碼如下:

os.system('ls')

#返回結(jié)果0或者1,不能得到命令的輸出

2. os.popen()

代碼如下:

output = os.popen('ls')

print output.read()

#打印出的是命令輸出,但是得不到執(zhí)行的返回值

3. commands.getstatusoutput()

代碼如下:

(status, output) = commands.getstatusoutput('ls')

print status, output

#打印出返回值和命令輸出

可以根據(jù)需要選取其中一種方法,以下是python執(zhí)行shell獲取硬件參數(shù)寫入mysql,并定期更新的程序:

代碼如下:

'''

Created on Dec 10, 2014

@author: liufei

'''

#coding=utf-8

import time, sched, os, string

from datetime import datetime

import MySQLdb

s = sched.scheduler(time.time,time.sleep)

def event_func():

    try:

        #主機(jī)名

        name = os.popen(""" hostname """).read()

        #cpu數(shù)目

        cpu_num = os.popen(""" cat /proc/cpuinfo | grep processor | wc -l """).read()

        #內(nèi)存大小

        mem = os.popen(""" free | grep Mem | awk '{print $2}' """).read()

        #機(jī)器品牌

        brand = os.popen(""" dmidecode | grep 'Vendor' | head -1 | awk -F: '{print $2}' """).read()

        #型號(hào)

        model = os.popen(""" dmidecode | grep 'Product Name' | head -1 | awk -F: '{print $2}' """).read()

        #磁盤大小

        storage = os.popen(""" fdisk -l | grep 'Disk /dev/sd' | awk 'BEGIN{sum=0}{sum=sum+$3}END{print sum}' """).read()

        #mac地址

        mac = os.popen(""" ifconfig -a | grep HWaddr | head -1 | awk '{print $5}' """).read()

       

        name = name.replace("\n","").lstrip()

        cpu_num =  cpu_num.replace("\n","").lstrip()

        memory_gb = round(string.atof(mem.replace("\n","").lstrip())/1000.0/1000.0, 1)

        brand = brand.replace("\n","").lstrip()

        model = model.replace("\n","").lstrip()

        storage_gb = storage.replace("\n","").lstrip()

        mac = mac.replace("\n","").lstrip()

       

        print name

        print cpu_num

        print memory_gb

        print storage_gb

        print brand

        print model

        print mac

   

        conn=MySQLdb.connect(host='xx.xx.xx.xx',user='USERNAME',passwd='PASSWORD',db='DBNAME',port=3306)

        cur=conn.cursor()

        cur.execute('select mac from servers where mac=%s',mac)

        data = cur.fetchone()

        if data is None:

            value = [name, brand, model, memory_gb, storage_gb, cpu_num, mac, datetime.now(), datetime.now()]

            cur.execute("insert into servers(name, brand, model, memory_gb, storage_gb, cpu_num, mac,  created_at, updated_at) values(%s, %s, %s, %s, %s, %s, %s, %s, %s)",value)           

        else:

            value1 = [name, brand, model, memory_gb, storage_gb, cpu_num, datetime.now(), mac]

            cur.execute("update servers set name=%s,brand=%s,model=%s,memory_gb=%s,storage_gb=%s,cpu_num=%s, updated_at=%s where mac=%s",value1)

          

        conn.commit()

        cur.close()

        conn.close()

       

    except MySQLdb.Error,e:

        print "Mysql Error %d: %s" % (e.args[0], e.args[1])

   

def perform(inc):

    s.enter(inc,0,perform,(inc,))

    event_func()

   

def mymain(inc=10):

    s.enter(0,0,perform,(inc,))

    s.run()

if __name__ == "__main__":

    mymain()

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:python執(zhí)行shell獲取硬件參數(shù)寫入mysql的方法
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)