python执行shell获取硬件参数写入mysql的方法
admin
2023-07-31 02:10:27
0

本文实例讲述了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程序设计有所帮助。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...