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


Posted in Python onDecember 29, 2014

本文实例讲述了python执行shell获取硬件参数写入mysql的方法。分享给大家供大家参考。具体分析如下:

最近要获取服务器各种参数,包括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()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
linux下安装easy_install的方法
Feb 10 Python
python使用点操作符访问字典(dict)数据的方法
Mar 16 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
Apr 05 Python
python中的lambda表达式用法详解
Jun 22 Python
Django外键(ForeignKey)操作以及related_name的作用详解
Jul 29 Python
Python操作qml对象过程详解
Sep 26 Python
Python浮点数四舍五入问题的分析与解决方法
Nov 19 Python
Python json读写方式和字典相互转化
Apr 18 Python
pyspark给dataframe增加新的一列的实现示例
Apr 24 Python
Python OpenCV读取中文路径图像的方法
Jul 02 Python
python中判断文件结束符的具体方法
Aug 04 Python
python函数指定默认值的实例讲解
Mar 29 Python
简单的抓取淘宝图片的Python爬虫
Dec 25 #Python
简单使用Python自动生成文章
Dec 25 #Python
Python 抓取动态网页内容方案详解
Dec 25 #Python
利用Psyco提升Python运行速度
Dec 24 #Python
Python解决鸡兔同笼问题的方法
Dec 20 #Python
Python列表计数及插入实例
Dec 17 #Python
Python二维码生成库qrcode安装和使用示例
Dec 16 #Python
You might like
基于PHP的简单采集数据入库程序
2014/07/30 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
js内置对象 学习笔记
2011/08/01 Javascript
jQuery插件pagination实现分页特效
2015/04/12 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
推荐11个实用Python库
2015/01/23 Python
Python实现购物程序思路及代码
2017/07/24 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
python基于opencv 实现图像时钟
2021/01/04 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
优秀的教师个人的中文求职信
2013/09/21 职场文书
个人自我鉴定怎么写
2013/10/28 职场文书
土木工程师岗位职责
2013/11/24 职场文书
迟到检讨书900字
2014/01/14 职场文书
班主任工作经验材料
2014/02/02 职场文书
文员岗位职责范本
2014/03/08 职场文书
授权委托书范本
2014/04/03 职场文书
2015年学校精神文明工作总结
2015/05/27 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
班主任工作总结范文
2015/08/13 职场文书
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫