# -*- 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())

Python脚本获取Linux系统信息的更多相关文章

  1. python脚本在linux下的执行

    假设现有一篇待执行的python脚本test.py python脚本在linux下面执行有两种方式: 打开Linux终端,输入 python test.py 在test.py脚本第一行添加声明 #!/ ...

  2. 使用 Python 获取 Linux 系统信息

    探索platform模块 platform模块在标准库中,它有很多运行我们获得众多系统信息的函数.让我们运行Python解释器来探索它们中的一些函数,那就从platform.uname()函数开始吧: ...

  3. 【转】 使用 Python 获取 Linux 系统信息

    在本文中,我们将会探索使用Python编程语言工具来检索Linux系统各种信息.走你. 哪个Python版本? 当我提及Python,所指的就是CPython 2(准确的是2.7).我会显式提醒那些相 ...

  4. 使用 python 获取 Linux 系统信息(通过dmidecode命令)

    通过 dmidecode 命令可以获取到 Linux 系统的包括 BIOS. CPU.内存等系统的硬件信息,这里使用 python 代码来通过调用 dmidecode 命令来获取 Linux 必要的系 ...

  5. 使用 python 收集获取 Linux 系统主机信息

    使用 python 代码收集主机的系统信息,主要:主机名称.IP.系统版本.服务器厂商.型号.序列号.CPU信息.内存等系统信息. #!/usr/bin/env python #encoding: u ...

  6. 使用Python收集获取Linux系统主机信息

    爬虫代理IP由芝麻HTTP服务供应商提供 使用 python 代码收集主机的系统信息,主要:主机名称.IP.系统版本.服务器厂商.型号.序列号.CPU信息.内存等系统信息. #!/usr/bin/en ...

  7. sehlle脚本获取linux服务器基本信息

    将以下代码全选复制在linux机器上新建x.sh文件编辑复制进去执行即可. #获取linux服务器基本信息脚本 #!/bin/bash # #Name:system_info #Ver:1.0 #Au ...

  8. Python输出内容的三种方式:print输出 python脚本执行 linux直接执行

    1.  在linux中安装python后,在linux命令行中输入python即可切换到Python命令行下 退出python命令行的命令: 老版本:ctrl+D 新版本:quit();或exit() ...

  9. 如何解决Python脚本在Linux和Windows上的格式问题

    python是一种对缩进有严格要求的语言, Python脚本可以使用非常多的工具进行编写,笔者在Linux系统使用JEdit进行Python脚本编写,由于在Linux编写脚本比较痛苦,比如想一眼看出相 ...

随机推荐

  1. MySQL 5.6常用参数配置及说明

    [client] user = root password = Yong_110 [mysql] prompt = [\\u@\\p][\\d]>\\_ no-auto-rehash [mysq ...

  2. jeesite项目

    1,登录页面.最高权限管理员 用户名:thinkgem  密码:admin 2,登陆之后展示的首页 3,分为不同的模块,由不同的入负责,我负责日志管理 已完成功能:模糊查询,分页,导入,导出Excel ...

  3. java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序

    package com.swift; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; publi ...

  4. servlet从服务器磁盘文件读出到浏览器显示,中文乱码问题,不要忘记在输入流和输出流都要设置编码格式,否则一个地方没设置不统一就会各种乱码

    package com.swift; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOE ...

  5. React 服务端渲染最佳解决方案

    最近在开发一个服务端渲染工具,通过一篇小文大致介绍下服务端渲染,和服务端渲染的方式方法.在此文后面有两中服务端渲染方式的构思,根据你对服务端渲染的利弊权衡,你会选择哪一种服务端渲染方式呢? 什么是服务 ...

  6. node基础

    javascript window gulp ---- 前端工程构建工具 webpack ---- 前端工程构建工具 java Python php:后台 本地电脑,服务器 node 本地或服务端运行 ...

  7. 螺旋矩阵,两步进阶,从暴力到o(1)

    题目描述 一个 n 行 n 列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵中所有格 ...

  8. 牛客小白月赛5 A 无关(relationship) 【容斥原理】【数据范围处理】

    题目链接:https://www.nowcoder.com/acm/contest/135/A 题目描述 若一个集合A内所有的元素都不是正整数N的因数,则称N与集合A无关.   给出一个含有k个元素的 ...

  9. Spring Framework(框架)整体架构 变迁

    Spring Framework(框架)整体架构 2018年04月24日 11:16:41 阅读数:1444 标签: Spring框架架构 更多 个人分类: Spring框架   版权声明:本文为博主 ...

  10. wireshark_1.6.2 使用笔记

    表示ip1是否有访问ip2,进行抓包