python执行shell获取硬件参数写入mysql

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

最近要获取服务器各种参数,包括cpu、内存、磁盘、型号等信息。试用了Hyperic HQ、Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy。

于是乎想到用python执行shell获取这些信息,python执行shell脚本有以下三种方法:

1. os.system()

os.system('ls')

#返回结果0或者1,不能得到命令的输出

2. os.popen()

output = os.popen('ls')PRint output.read()

#打印出的是命令输出,但是得不到执行的返回值

3. commands.getstatusoutput()

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

print status, output

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

可以根据需要选取其中一种方法,以下是python执行shell获取硬件参数写入MySQL,并定期更新的程序:

1'''2Created on Dec 10, 201434@author: liufei5'''6#coding=utf-87importtime, sched, os, string8fromdatetimeimportdatetime9importMySQLdb1011s =sched.scheduler(time.time,time.sleep)1213defevent_func():14try:15#主机名16name = os.popen("""hostname""").read()17#cpu数目18cpu_num = os.popen("""cat /proc/cpuinfo | grep processor | wc -l""").read()19#内存大小20mem = os.popen("""free | grep Mem | awk '{print $2}'""").read()21#机器品牌22

brand = os.popen("""dmidecode | grep 'Vendor' | head -1 | awk -F: '{print $2}'""").read()23#型号24model = os.popen("""dmidecode | grep 'Product Name' | head -1 | awk -F: '{print $2}'""").read()25#磁盘大小26storage = os.popen("""fdisk -l | grep 'Disk /dev/sd' | awk 'BEGIN{sum=0}{sum=sum+$3}END{print sum}'""").read()27#mac地址28mac = os.popen("""ifconfig -a | grep HWaddr | head -1 | awk '{print $5}'""").read()29303132name = name.replace("\n","").lstrip()33cpu_num = cpu_num.replace("\n","").lstrip()34memory_gb = round(string.atof(mem.replace("\n","").lstrip())/1000.0/1000.0, 1)35

brand = brand.replace("\n","").lstrip()36model = model.replace("\n","").lstrip()37storage_gb = storage.replace("\n","").lstrip()38mac = mac.replace("\n","").lstrip()3940printname41printcpu_num42printmemory_gb43printstorage_gb44print

brand45printmodel46printmac4748conn=MySQLdb.connect(host='xx.xx.xx.xx',user='USERNAME',passwd='PASSWord',db='DBNAME',port=3306)49cur=conn.cursor()50cur.execute('select mac from servers where mac=%s',mac)51data =cur.fetchone()5253ifdataisNone:54value =[name, brand, model, memory_gb, storage_gb, cpu_num, mac, datetime.now(), datetime.now()]55cur.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)56else:57value1 =[name, brand, model, memory_gb, storage_gb, cpu_num, datetime.now(), mac]58cur.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)5960conn.commit()61cur.close()62conn.close()6364exceptMySQLdb.Error,e:65print"Mysql Error %d: %s"% (e.args[0], e.args[1])6667defperform(inc):68s.enter(inc,0,perform,(inc,))69event_func()7071defmymain(inc=10):72s.enter(0,0,perform,(inc,))73s.run()7475if__name__=="__main__":76mymain()

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航