设为首页 加入收藏

TOP

Python 提取Linux的硬件信息(一)
2018-11-26 18:10:48 】 浏览:40
Tags:Python 提取 Linux 硬件 信息

1、代码实现目的


注:代码可以直接粘贴使用


为了实现对主机的整体有明确的了解,实现了下面的代码功能


代码主要功能是:


提取到主机的内存、硬盘、CPU、型号等信息


插入到mysql的数据库


回到顶部


2、代码具体实现步骤


2.1首先要先在mysql中新建数据库和数据表


新建数据库:


create database host;


新建数据表:


CREATE TABLE `host_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `product` varchar(255) DEFAULT NULL,
  `cpu_num` varchar(255) DEFAULT NULL,
  `hostname` varchar(255) DEFAULT NULL,
  `ip_out` varchar(255) NOT NULL DEFAULT '',
  `cpu_model` varchar(255) DEFAULT NULL,
  `ip_in` varchar(255) DEFAULT NULL,
  `osver` varchar(255) DEFAULT NULL,
  `sn` varchar(255) DEFAULT NULL,
  `Memory` varchar(255) DEFAULT NULL,
  `vender` varchar(255) DEFAULT NULL,
  `Disk` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`,`ip_out`),
  UNIQUE KEY `ip_out` (`ip_out`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;


2.2 下面就是具体获取硬件信息的代码:


#!/usr/bin/env python
# encoding: utf-8
 
'''
收集主机的信息:
主机名称、IP、系统版本、服务器厂商、型号、序列号、CPU信息、内存信息
'''
 
from subprocess import Popen, PIPE
import os, sys
import socket, fcntl, struct
from collections import namedtuple
import pymysql
import re
 
'''获取所以磁盘信息'''
 
disk_ntuple = namedtuple('partition', 'device mountpoint fstype')
usage_ntuple = namedtuple('usage', 'total used free percent')
 
 
''' 获取 ifconfig 命令的输出 '''
 
def getIfconfig():
    p = Popen(['ifconfig'], stdout=PIPE)
    data = p.stdout.read()
    return data
 
 
''' 获取 dmidecode 命令的输出 '''
 
def getDmi():
    p = Popen(['dmidecode'], stdout=PIPE)
    data = p.stdout.read()
    return data
 
 
'''获取磁盘总大小  格式sda[300GB]+sdb[300GB]'''
 
def humanize_bytes(bytesize, precision=0):
    abbrevs = (
        (10**15, 'PB'),
        (10**12, 'TB'),
        (10**9, 'GB'),
        (10**6, 'MB'),
        (10**3, 'kB'),
        (1, 'bytes')
    )
    if bytesize == 1:
        return '1 byte'
    for factor, suffix in abbrevs:
        if bytesize >= factor:
            break
    return '%.*f%s' % (precision, round(float(bytesize) / factor), suffix)
 
def dev_phy_size():
  with open('/proc/partitions','r') as dp:
    res = ''
    for disk in dp.readlines():
      if re.search(r'[s,h,v]d[a-z]\n',disk):
        blknum = disk.strip().split(' ')[-2]
        dev = disk.strip().split(' ')[-1]
        size = int(blknum)*1024
        consist = dev+'['+humanize_bytes(size).strip()+']'
        res += consist + '+'
    return {'Disk':res[:-1]}
 
 
# '''获取分区路径和挂载、格式信息'''
# def disk_partitions(all=False):
#    """Return all mountd partitions as a nameduple.
#    If all == False return phyisical partitions only.
#    """
#    phydevs = []
#    f = open("/proc/filesystems", "r")
#    for line in f:
#        if not line.startswith("nodev"):
#            phydevs.append(line.strip())
#
#
编程开发网

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言列出真分数序列代码及解析 下一篇C语言求勾股数代码及解析

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }