# -*- 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. Jmeter模拟http请求

    一.获取用户信息(GET请求):http://hostname/getuser?userid=1 1.打开jmeter,创建一个线程组,再添加一个http请求Sampler 2.设置域名.路径.请求方 ...

  2. Vue之Vue-touch的使用

    最近项目中,有的页面发现设置返回键看起来怪怪的,感觉与整体不协调,于是就考虑使用手势滑动事件来实现返回功能~ 开叉查阅资料~找到了vue-touch,使用起来可谓是简单粗暴啊,适合我这样的快速开发人员 ...

  3. Webpack--模块打包器

    首先介绍一个安装webpack的百度经验:https://jingyan.baidu.com/article/a3a3f811230ee58da3eb8a6e.html 推荐一个详细介绍webpack ...

  4. bat 服务启动脚本

    当电脑上有多个数据库(特别是Oracle,占用内存大,所以我都是设置为手动启动的,或者想在电脑上运行一下其他UI类软件或玩些游戏的时候也需要暂时关掉,奈何我这渣机(V_V))需要启动或停止的时候,就用 ...

  5. java中如何设置HTTP协议的头信息(header)

    首先,我们先看一下http的头信息到底是什么:HTTP(HyperTextTransferProtocol) 即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了请求/响应模型,浏览器或其他 ...

  6. linux几种文件传输方式

    本文记录linux系统中文件传输的多种方式,留作备忘.linux中文件传输的方式有ftp,scp,rsync,rz,sz等,但各个工具的功能又有所区别: FTP : FTP是文件服务器,可实现文件的上 ...

  7. windows 解决缺失.dll的问题

    1.缺失MSVCR120.dell和MSVCP120.dll,如图: 这种问题是因为没有Microsoft Visual C++ 2013运行库的问题,自行百度在Microsoft官网下载即可,注意需 ...

  8. webpack+thymeleaf实现数据直出

    webpack动态插入thymeleaf模板,MVC将要使用数据传递到模板中渲染,得到的html就已经带有要初始显示的数据了github:https://github.com/947133297/we ...

  9. tcl之基本语法—3

  10. stark组件(2):提取公共视图函数、URL分发和设置别名

    效果图: Handler类里处理的增删改查.路由分发.给URL设置别名等包括以后还要添加的很多功能,每一个数据库的类都需要,所以我们要把Handler提取成一个基类.提取成基类后,每一个数据表都可以继 ...