# -*- coding:utf-8 -*- 
import os 
import subprocess 
import re 
import hashlib 
#对字典取子集 
def sub_dict(form_dict, sub_keys, default=None): 
    return dict([(k, form_dict.get(k.strip(), default)) for k in sub_keys.split(',')]) 
#读取cpuinfo信息 
# dmidecode -t 4 
def read_cpuinfo(): 
    cpu_stat = [] 
    with open('/proc/cpuinfo', 'r') as f: 
        data = f.read() 
        for line in data.split('\n\n'): 
            cpu_stat.append(line) 
    return cpu_stat[-2] 
#读取fdisk信息 
def read_fdisk(): 
    p = subprocess.Popen('fdisk -l', stdout=subprocess.PIPE, shell=True) 
    out = p.communicate()[0] 
    info = [] 
    for i in out.split('\n\n'): 
        for x in i.splitlines(): 
            if x: 
                info.append(x) 
    return info 
#读取dmidecode信息 
def read_dmidecode(): 
    p = subprocess.Popen('dmidecode -t 1', stdout=subprocess.PIPE, shell=True) 
    return p.communicate()[0] 
#读取ifconfig信息 
def read_ifconfig(): 
    p = subprocess.Popen('ifconfig', stdout=subprocess.PIPE, shell=True) 
    return p.communicate()[0] 
#返回cpu信息:CPU型号、颗数、核数 
def get_cpuinfo(data): 
    cpu_info = {} 
    for i in data.splitlines(): 
        k, v = [x.strip() for x in i.split(':')] 
        cpu_info[k] = v 
        
    cpu_info['physical id'] = str(int(cpu_info.get('physical id')) + 1) 
    return sub_dict(cpu_info, 'model name,physical id,cpu cores') 
#返回每块硬盘大小 
def get_diskinfo(data): 
    disk_info = {} 
    m_disk = re.compile(r'^Disk\s/dev') 
                
    for i in data: 
        if m_disk.match(i): 
            i = i.split(',')[0] 
            k, v = [x for x in i.split(':')] 
            disk_info[k] = v 
    return disk_info 
#返回硬件信息:品牌、型号 
def get_dmiinfo(data): 
    dmi_info = {} 
    line_in = False
    for line in data.splitlines(): 
        if line.startswith('System Information'): 
            line_in = True
            continue
        if line.startswith('\t') and line_in: 
            k, v = [i.strip() for i in line.split(':')] 
            dmi_info[k] = v 
        else: 
            line_in = False
    return sub_dict(dmi_info, 'Manufacturer,Product Name,Serial Number') 
#返回网卡及ip信息:网卡、IP址、MAC地址 
def get_ipinfo(data): 
    data = (i for i in data.split('\n\n') if i and not i.startswith('lo')) 
    ip_info = [] 
    ifname = re.compile(r'(eth[\d:]*|wlan[\d:]*)') 
    ipaddr = re.compile(r'(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})){3}') 
    macaddr = re.compile(r'[A-F0-9a-f:]{17}') 
    for i in data: 
        x = {} 
        if ifname.match(i): 
            device = ifname.match(i).group() 
            x['Adapter'] = device 
        if macaddr.search(i): 
            mac = macaddr.search(i).group() 
            x['MAC'] = mac 
        if ipaddr.search(i): 
            ip = ipaddr.search(i).group() 
            x['IP'] = ip 
        else: 
            x['IP'] = None
        ip_info.append(x) 
    return ip_info 
#返回内存及swap大小 
def get_meminfo(): 
    mem_info = {} 
    with open('/proc/meminfo', 'r') as f: 
        data = f.readlines() 
        for i in data: 
            k, v = [x.strip() for x in i.split(':')] 
            mem_info[k] = int(v.split()[0]) 
    return sub_dict(mem_info, 'MemTotal,SwapTotal') 
#返回操作信息 
def get_osinfo(): 
    os_info = {} 
    i = os.uname() 
    os_info['os_type'] = i[0] 
    os_info['node_name'] = i[1] 
    os_info['kernel'] = i[2] 
    return os_info 
#唯一标识符 
def get_indentity(data): 
    match_serial = re.compile(r"Serial Number: .*", re.DOTALL) 
    match_uuid = re.compile(r"UUID: .*", re.DOTALL) 
    if match_serial.search(data): 
        serial = match_serial.search(data).group() 
    if match_uuid.search(data): 
        uuid = match_uuid.search(data).group() 
    if serial: 
        serial_md5 = hashlib.md5(serial).hexdigest() 
        return serial_md5 
    elif uuid: 
        uuid_md5 = hashlib.md5(uuid).hexdigest() 
        return uuid_md5 
if __name__ == "__main__": 
    ipinfo = get_ipinfo(read_ifconfig()) 
    dmiinfo = get_dmiinfo(read_dmidecode()) 
    cpuinfo = get_cpuinfo(read_cpuinfo()) 
    diskinfo = get_diskinfo(read_fdisk()) 
    meminfo = get_meminfo() 
    osinfo = get_osinfo() 
    identity = get_indentity(read_dmidecode())

最新文章

  1. DEDECMS之三 首页、列表页怎么调用文章内容
  2. android之远程启动服务
  3. C#中的泛型 【转】
  4. 转:python webdriver API 之操作测试对象
  5. MSP430F149学习之路——UART
  6. SPOJ 694 (后缀数组) Distinct Substrings
  7. Spark源码的编译过程详细解读(各版本)
  8. Android客户端实现七牛云存储文件上传
  9. 一些User-Agent
  10. 【Android Developers Training】 30. 允许其它应用启动你的Activity
  11. Unity Editor 检查工程Prefab(预设)中的空组件
  12. Springmvc_validation 效验器
  13. MVC-1(javabean+jsp+servlet+jdbc)
  14. 《转》:JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
  15. html和css问题?
  16. HDU--5519 Sequence II (主席树)
  17. 在已有Windows系统基础上安装ubuntu后无Windows启动项
  18. Mysql(压缩包)下载与安装
  19. nginx判断为404跳转
  20. PAT甲级1012. The Best Rank

热门文章

  1. 使用AirDroid控制百度影棒
  2. JavaScript操作Array对象常用的方法
  3. 2018.5.22 Oracle安装配置在虚拟机中外部电脑连接服务
  4. php 单例模式笔记
  5. 由一道CTF pwn题深入理解libc2.26中的tcache机制
  6. 洛谷 3567/BZOJ 3524 Couriers
  7. mysql -u root -p 解释
  8. 1- vue django restful framework 打造生鲜超市
  9. Ubuntu16.04 hadoop 伪分布式 的文件配置
  10. php 数据脱敏显示