最近要获取服务器各种参数,包括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,并定期更新的程序:

 '''
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:
#主机名
name = os.popen(""" hostname """).read()
#cpu数目
cpu_num = os.popen(""" cat /proc/cpuinfo | grep processor | wc -l """).read()
#内存大小
mem = os.popen(""" free | grep Mem | awk '{print $2}' """).read()
#机器品牌
brand = os.popen(""" dmidecode | grep 'Vendor' | head -1 | awk -F: '{print $2}' """).read()
#型号
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()

最新文章

  1. 两个有意思的模式在ECMAScript中的实现
  2. T-SQL存储过程、游标
  3. Codeforces 260 B. Fedya and Maths
  4. LNMP软件安装所在的目录详细
  5. js弹出图片原图效果
  6. Java-数据结构与算法-逢3减1
  7. BZOJ2086: [Poi2010]Blocks
  8. mysql中如何更新一个字段的值为它本身的值连接上一个字符串
  9. Jquery 学习插件第一天
  10. js 日常问题记录
  11. 关于FND_PROFILE与FND_GLOBLE[Z]
  12. ios学习笔记之2天来总结
  13. 4052: [Cerc2013]Magical GCD
  14. windows利用iis配置反向代理实现ECS内网互通oss
  15. 基于ECharts的饼状数据展示
  16. python Flask
  17. C++常量 运算符
  18. (转!)Netdata---Linux系统性能实时监控平台部署
  19. Tdrag
  20. isnotblank与isnotempty的区别

热门文章

  1. GeoPandas官方中文文档--译著
  2. cf602A Two Bases
  3. openStack controller 管理网口TX数据量非常大 网络总是丢包
  4. Count the string - HDU 3336(next+dp)
  5. Hard 随机洗牌函数 @CareerCup
  6. jni java和C之间的值传递(int String int[])
  7. [转] FDA批准首个莫米松植入式给药系统用于治疗慢性鼻窦炎
  8. Tips--怎么使用谷歌搜索
  9. noip 2015 运输计划 (lca+二分)
  10. 开始学习编程了…… 2015年九月七日 …… 31岁的Me.