Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python 获取Linux和Windows硬件信息

python 获取Linux和Windows硬件信息

作者头像
py3study
发布于 2020-01-07 08:25:03
发布于 2020-01-07 08:25:03
6.4K01
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:1
代码可运行

linux

获取linux硬件信息的方式,有很多。

1.使用puppet或者saltstack

2.直接读取/proc/xx文件,比如cpu信息,就是/proc/cpuinfo

3.dmidecode

4.psutil,它可以获取某些信息,但是对于CPU型号,无法获取!

接下来讨论一下关于 python-hwinfo, 它是一个展示硬件信息概况的工具之一,并且其配置简洁

什么是 python-hwinfo

这是一个通过解析系统工具(例如 lspci 和 dmidecode)的输出,来检查硬件和设备的 Python 库。它提供了一个简单的命令行工具,可以用来检查本地、远程的主机和记录的信息。用 sudo 运行该命令以获得最大的信息。

另外,你可以提供服务器 IP 或者主机名、用户名和密码,在远程的服务器上执行它。当然你也可以使用这个工具查看其它工具捕获的输出(例如 demidecode 输出的 dmidecode.out,/proc/cpuinfo 输出的cpuinfo,lspci -nnm 输出的 lspci-nnm.out)。

Linux 上如何安装 python-hwinfo

在绝大多数 Linux 发行版,都可以通过 pip 包安装。为了安装 python-hwinfo, 确保你的系统已经有 Python 和python-pip 包作为先决条件。

pip 是 Python 附带的一个包管理工具,在 Linux 上安装 Python 包的推荐工具之一。

在 RHEL/CentOS 平台,使用 YUM 命令安装 pip

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install -y python-pip python-devel

最后,执行下面的 pip 命令安装 python-hwinfo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install python-hwinfo

怎么在本地机器使用 python-hwinfo

执行下面的命令,检查本地机器现有的硬件。输出很清楚和整洁,这是我在其他命令中没有看到的。

它的输出分为了五类:

1.Bios Info(BIOS 信息): BIOS 供应商名称、系统产品名称、系统序列号、系统唯一标识符、系统制造商、BIOS 发布日期和BIOS 版本。

2.CPU Info(CPU 信息):处理器编号、供应商 ID,CPU 系列代号、型号、步进编号、型号名称、CPU 主频。

3.Ethernet Controller Info(网卡信息): 供应商名称、供应商 ID、设备名称、设备 ID、子供应商名称、子供应商 ID,子设备名称、子设备 ID。

4.Storage Controller Info(存储设备信息): 供应商名称、供应商 ID、设备名称、设备 ID、子供应商名称,子供应商 ID、子设备名称、子设备 ID。

5.GPU Info(GPU 信息): 供应商名称、供应商 ID、设备名称、设备 ID、子供应商名称、子供应商 ID、子设备名称、子设备 ID。

执行命名hwinfo -e 表示输出json格式的数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# hwinfo -e


{
    "bios": {
        "bios_vendor_name": "Phoenix Technologies LTD",
        "system_product_name": "VMware Virtual Platform",
        "system_serial_number": "VMware-56 4d 53 d2 bd 73 ed 36-61 08 23 cc 4a c7 b7 ff",
        "chassis_type": "Other",
        "system_uuid": "564D53D2-BD73-ED36-6108-23CC4AC7B7FF",
        "system_manufacturer": "VMware, Inc.",
        "socket_count": 64,
        "bios_release_date": "05/19/2017",
        "bios_version": "6.00",
        "socket_designation": "CPU #000, CPU #001, CPU #002, CPU #003, CPU #004, CPU #005, CPU #006, CPU #007, CPU #008, CPU #009, CPU #010, CPU #011, CPU #012, CPU #013, CPU #014, CPU #015, CPU #016, CPU #017, CPU #018, CPU #019, CPU #020, CPU #021, CPU #022, CPU #023, CPU #024, CPU #025, CPU #026, CPU #027, CPU #028, CPU #029, CPU #030, CPU #031, CPU #032, CPU #033, CPU #034, CPU #035, CPU #036, CPU #037, CPU #038, CPU #039, CPU #040, CPU #041, CPU #042, CPU #043, CPU #044, CPU #045, CPU #046, CPU #047, CPU #048, CPU #049, CPU #050, CPU #051, CPU #052, CPU #053, CPU #054, CPU #055, CPU #056, CPU #057, CPU #058, CPU #059, CPU #060, CPU #061, CPU #062, CPU #063"
    },
    "storage_controllers": [
        {
            "subdevice_name": "Virtual Machine Chipset",
            "subdevice_id": "1976",
            "subvendor_id": "15ad",
            "vendor_id": "8086",
            "device_name": "82371AB/EB/MB PIIX4 IDE",
            "vendor_name": "Intel Corporation",
            "subvendor_name": "VMware",
            "class": "0101",
            "device_id": "7111"
        },
        {
            "subdevice_name": "LSI Logic Parallel SCSI Controller",
            "subdevice_id": "1976",
            "subvendor_id": "15ad",
            "vendor_id": "1000",
            "device_name": "53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI",
            "vendor_name": "LSI Logic / Symbios Logic",
            "subvendor_name": "VMware",
            "class": "0100",
            "device_id": "0030"
        }
    ],
    "cpu": [
        {
            "model": "94",
            "clflush_size": "64",
            "cpu_family": "6",
            "address_sizes": "40 bits physical, 48 bits virtual",
            "vendor_id": "GenuineIntel",
            "bogomips": "5202.00",
            "processor": "0",
            "fpu": "yes",
            "cpuid_level": "22",
            "fpu_exception": "yes",
            "stepping": "3",
            "cache_alignment": "64",
            "cache_size": "6144 KB",
            "flags": "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm 3dnowprefetch arat fsgsbase smep",
            "microcode": "0xbe",
            "cpu_mhz": "2599.936",
            "model_name": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
            "wp": "yes"
        }
    ],
    "gpus": [
        {
            "subdevice_name": "SVGA II Adapter",
            "subdevice_id": "0405",
            "subvendor_id": "15ad",
            "vendor_id": "15ad",
            "device_name": "SVGA II Adapter",
            "vendor_name": "VMware",
            "subvendor_name": "VMware",
            "class": "0300",
            "device_id": "0405"
        }
    ],
    "nics": [
        {
            "subdevice_name": "PRO/1000 MT Single Port Adapter",
            "subdevice_id": "0750",
            "subvendor_id": "15ad",
            "vendor_id": "8086",
            "device_name": "82545EM Gigabit Ethernet Controller (Copper)",
            "vendor_name": "Intel Corporation",
            "subvendor_name": "VMware",
            "class": "0200",
            "device_id": "100f"
        }
    ]
}

注意:这个命令只能在Python 2.7才能使用。Python 3.x执行会报错!

Windows

windows不能使用hwinfo,因为hwinfo是读取/proc/xx文件的。而windows是没有的,所以会报错!需要使用其他模块来获取

使用下面的命令安装2个模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install wmi pyinstaller

新建一个文件win_sysinfo.py,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#_*_coding:utf-8_*_

import platform
import win32com
import wmi
import os
import json

def collect():
    data = {
        'os_type': platform.system(),
        'os_release':"%s %s  %s "%( platform.release() ,platform.architecture()[0],platform.version()),
        'os_distribution': 'Microsoft',
        'asset_type':'server'
    }

    win32obj = Win32Info()
    data.update(win32obj.get_cpu_info())
    data.update(win32obj.get_ram_info())
    data.update(win32obj.get_server_info())
    data.update(win32obj.get_disk_info())
    data.update(win32obj.get_nic_info())

    # for k,v in data.items():
    #    print k,v
    return data

class Win32Info(object):
    def __init__(self):
        self.wmi_obj = wmi.WMI()
        self.wmi_service_obj = win32com.client.Dispatch("WbemScripting.SWbemLocator")
        self.wmi_service_connector =self.wmi_service_obj.ConnectServer(".","root\cimv2")

    def get_cpu_info(self):
        data = {}
        cpu_lists = self.wmi_obj.Win32_Processor()
        cpu_core_count = 0

        for cpu in cpu_lists:
            cpu_core_count += cpu.NumberOfCores
            cpu_model = cpu.Name
        data["cpu_count"] = len(cpu_lists)
        data["cpu_model"] = cpu_model
        data["cpu_core_count"] =cpu_core_count
        return data

    def get_ram_info(self):
        data = []
        ram_collections = self.wmi_service_connector.ExecQuery("Select * from Win32_PhysicalMemory")
        for item in ram_collections:
            item_data = {}
            #print item
            mb = int(1024 * 1024)
            ram_size = int(item.Capacity) / mb
            item_data = {
                "slot":item.DeviceLocator.strip(),
                "capacity":ram_size,
                "model":item.Caption,
                "manufactory":item.Manufacturer,
                "sn":item.SerialNumber,
            }
            data.append(item_data)

        return {"ram":data}
    def get_server_info(self):
        computer_info =  self.wmi_obj.Win32_ComputerSystem()[0]
        system_info =  self.wmi_obj.Win32_OperatingSystem()[0]
        data = {}
        data['manufactory'] = computer_info.Manufacturer
        data['model'] = computer_info.Model
        data['wake_up_type'] = computer_info.WakeUpType
        data['sn'] = system_info.SerialNumber

        return data

    def get_disk_info(self):
        data = []
        for disk in self.wmi_obj.Win32_DiskDrive():
            #print  disk.Model,disk.Size,disk.DeviceID,disk.Name,disk.Index,disk.SerialNumber,disk.SystemName,disk.Description
            item_data = {}
            iface_choices = ["SAS","SCSI","SATA","SSD"]
            for iface in iface_choices:
                if iface in disk.Model:
                    item_data['iface_type']  = iface
                    break
            else:
                item_data['iface_type']  = 'unknown'
            item_data['slot']  = disk.Index
            item_data['sn']  = disk.SerialNumber
            item_data['model']  = disk.Model
            item_data['manufactory']  = disk.Manufacturer
            item_data['capacity']  = int(disk.Size ) / (1024*1024*1024)
            data.append(item_data)
        return {'physical_disk_driver':data}
    def get_nic_info(self):
        data = []
        for nic in self.wmi_obj.Win32_NetworkAdapterConfiguration():
            if nic.MACAddress is not None:
                item_data = {}
                item_data['macaddress'] = nic.MACAddress
                item_data['model'] = nic.Caption
                item_data['name'] = nic.Index
                if nic.IPAddress  is not None:
                    item_data['ipaddress'] = nic.IPAddress[0]
                    item_data['netmask'] = nic.IPSubnet
                else:
                    item_data['ipaddress'] = ''
                    item_data['netmask'] = ''
                bonding = 0
                #print nic.MACAddress ,nic.IPAddress,nic.ServiceName,nic.Caption,nic.IPSubnet
                #print item_data
                data.append(item_data)
        return {'nic':data}
    
if __name__=="__main__":
    ret = collect()
    print json.dumps(ret)

注意:此脚本,也是Python 2.7。需要在windows上安装Python 2.7

打开cmd窗口,执行脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python C:\Users\xiao\Desktop\win_sysinfo.py

效果如下:

但是dos窗口输出的内容,不好复制,怎么办呢?

将输出重定向到桌面的info.txt文件中(不需要手动创建)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python C:\Users\xiao\Desktop\win_sysinfo.py > C:\Users\xiao\Desktop\info.txt

打开txt文件,复制内容

打开在线json网页,将内容复制进去

http://www.bejson.com/

点击校验,效果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
	"model": "Inspiron 7559",
	"cpu_count": 1,
	"os_release": "10 64bit  10.0.17134 ",
	"nic": [{
		"macaddress": "00:FF:D6:54:71:F4",
		"model": "[00000001] TAP-Windows Adapter V9",
		"ipaddress": "",
		"name": 1,
		"netmask": ""
	}, {
		"macaddress": "00:50:56:C0:00:01",
		"model": "[00000002] VMware Virtual Ethernet Adapter for VMnet1",
		"ipaddress": "192.168.233.1",
		"name": 2,
		"netmask": ["255.255.255.0", "64"]
	}, {
		"macaddress": "00:50:56:C0:00:08",
		"model": "[00000003] VMware Virtual Ethernet Adapter for VMnet8",
		"ipaddress": "192.168.218.1",
		"name": 3,
		"netmask": ["255.255.255.0", "64"]
	}, {
		"macaddress": "F4:8E:38:EE:0B:9F",
		"model": "[00000004] Realtek PCIe GBE Family Controller",
		"ipaddress": "192.168.12.151",
		"name": 4,
		"netmask": ["255.255.255.0", "64"]
	}, {
		"macaddress": "58:FB:84:62:18:0D",
		"model": "[00000005] Intel(R) Dual Band Wireless-AC 3165",
		"ipaddress": "",
		"name": 5,
		"netmask": ""
	}, {
		"macaddress": "58:FB:84:62:18:0E",
		"model": "[00000006] Microsoft Wi-Fi Direct Virtual Adapter",
		"ipaddress": "",
		"name": 6,
		"netmask": ""
	}, {
		"macaddress": "5A:FB:84:62:18:0D",
		"model": "[00000007] Microsoft Wi-Fi Direct Virtual Adapter",
		"ipaddress": "",
		"name": 7,
		"netmask": ""
	}, {
		"macaddress": "82:97:20:52:41:53",
		"model": "[00000013] WAN Miniport (IP)",
		"ipaddress": "",
		"name": 13,
		"netmask": ""
	}, {
		"macaddress": "86:9F:20:52:41:53",
		"model": "[00000014] WAN Miniport (IPv6)",
		"ipaddress": "",
		"name": 14,
		"netmask": ""
	}, {
		"macaddress": "88:73:20:52:41:53",
		"model": "[00000015] WAN Miniport (Network Monitor)",
		"ipaddress": "",
		"name": 15,
		"netmask": ""
	}],
	"ram": [{
		"slot": "ChannelA-DIMM0",
		"model": "物理内存",
		"capacity": 8192,
		"sn": "14093411",
		"manufactory": "019800000000"
	}, {
		"slot": "ChannelB-DIMM0",
		"model": "物理内存",
		"capacity": 8192,
		"sn": "06048420",
		"manufactory": "019800000000"
	}],
	"cpu_model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
	"manufactory": "Dell Inc.",
	"physical_disk_driver": [{
		"slot": 0,
		"capacity": 119,
		"manufactory": "(标准磁盘驱动器)",
		"sn": "163363432723",
		"model": "SanDisk Z400s M.2 2280 128GB",
		"iface_type": "unknown"
	}, {
		"slot": 1,
		"capacity": 465,
		"manufactory": "(标准磁盘驱动器)",
		"sn": "            SBY6P77H",
		"model": "ST500LT012-1DG142",
		"iface_type": "unknown"
	}],
	"wake_up_type": 6,
	"sn": "00342-33067-00000-AAOEM",
	"cpu_core_count": 4,
	"os_type": "Windows",
	"os_distribution": "Microsoft",
	"asset_type": "server"
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/08/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
vmi:获取 windows 系统硬件信息
在之前开发windows应用程序时,为了实现一个注册码只能注册一台设备(只要不换机器一台电脑的设备序列号是唯一的),这时需要获取使用者电脑硬件的各种常见信息,如主板信息,cpu信息等,经过查询,模块vmi可以实现我的需求。
luckpunk
2025/01/18
2160
WMI技术介绍和应用——查询硬件信息
        这个月实在太忙了,一直没有时间去继续写WMI的应用例子。 本来是希望将《WMI技术介绍和应用》系列博文写的像WMI百科全书般,但是貌似对这个技术感兴趣的同学并不多,所以我决定对部分知识点点到为止,有需求的同学可以查询MSDN相关类的说明即可。本文将罗列一些可能使用到的一些知识点。如果你发现你期望查询的硬件信息在本文中没有写出来,请参看MSDN的《Computer System Hardware Classes》中相关的类。(转载请指明出于breaksoftware的csdn博客)
方亮
2019/01/16
2K0
Python [6] IT资产管理(下)
如需更详细的了解,请参考http://467754239.blog.51cto.com/4878013/1616551
py3study
2020/01/06
7570
Linux 查看系统硬件信息(实例详解)
linux查看系统的硬件信息,并不像windows那么直观,这里我罗列了查看系统信息的实用命令,并做了分类,实例解说。
九州暮云
2019/08/21
5.6K0
python写的用WMI检测windows系统信息、硬盘信息、网卡信息
python写的用WMI检测windows系统信息、硬盘信息、网卡信息 #!/usr/bin/env python -- coding: utf-8 -- import wmi import sys,time,platform def get_system_info(os): """ 获取操作系统版本。 """ print print "Operating system:" if os == "Windows": c = wmi.WMI
用户7705674
2021/09/23
7130
Python wmi 模块的学习
# -*- coding:utf-8 -*- import datetime import os import wmi import time import _winreg import pythoncom import threading import win32api import win32con import Queue c = wmi.WMI() # 如果要连接远程机器,只需要在WMI构造器中指定远程机器名即可 # c = wmi.WMI("some_other_machine") # Li
py3study
2020/01/08
2.9K0
Python WMI获取Windows系统信息 监控系统
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 #http://www.cnblogs.com/liu-ke/ 4 import wmi 5 import os 6 import sys 7 import platform 8 import time 9 10 def sys_version(): 11 c = wmi.WMI () 12 #获取操作系统版本 13 for sys in
流柯
2018/08/30
8730
c# 获取电脑硬件信息通用查询类[测试通过]
C#获取电脑硬件信息通用类[Computer]代码展示和分析,简介如下: 1.项目中添加System.Management引用。 2.添加类Computer,把下面代码全选,复制,粘贴。 3.使用方法new Computer().GetComputerName()。 using System; using System.Management; // 添加System.Management引用 public class Computer { public string CpuID; pub
磊哥
2018/04/26
1.2K0
linux下10条查看系统和硬件信息的命
如果只想知道系统的名称,可以使用uname命令,而无需打印系统的相关的信息.或者使用uname -s命令将打印系统的内核名称.
小柒吃地瓜
2020/04/22
3.2K0
9个Linux 常用查看系统硬件信息命令(实例详解)
在Linux下,我们经常需要查看系统的硬件信息, 这里我罗列了查看系统硬件信息的实用命令,并做了分类,实例解说。
网络工程师笔记
2021/05/17
5.3K0
9个Linux 常用查看系统硬件信息命令(实例详解)
WMI使用技巧集
WMI使用技巧集 很多的朋友对WMI可能见过但理解不深,我也是十分想了解关于WMI的知识,可一直找不运维
Java架构师必看
2021/03/22
9300
Python WMI获取Windows系统信息
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 #http://www.cnblogs.com/liu-ke/ 4 import wmi 5 import os 6 import sys 7 import platform 8 import time 9 10 def sys_version(): 11 c = wmi.WMI () 12 #获取操作系统版本 13 for sys in
流柯
2018/08/30
7530
系统硬件以及各类信息查看
描述:hwinfo 意即硬件信息工具,是另外一种很好的实用工具。它被用来检测系统中已存在的硬件,并且以可读的格式显示各种硬件组件的细节信息。 系统发行版安装 hwinfo:
全栈工程师修炼指南
2022/09/28
4.1K0
显示硬件信息的Linux命令【Linux-Command line】
可能有很多原因导致你需要查找有关计算机硬件的详细信息。 例如,如果需要帮助修复某些问题并在在线论坛上发布请求,人们会立即询问你有关计算机的详细信息。 再者,如果要升级计算机,则需要知道你已有的和可以拥有的。你需询问计算机以查看其规格。
QRosie
2019/11/24
4.5K0
显示硬件信息的Linux命令【Linux-Command line】
用 Linux 命令显示硬件信息
你可能会有很多的原因需要查清计算机硬件的详细信息。例如,你需要修复某些问题并在论坛上发出请求,人们可能会立即询问你的计算机具体的信息。或者当你想要升级计算机配置时,你需要知道现有的硬件型号和能够升级的型号。这些都需要查询你的计算机具体规格信息。
用户8670130
2021/09/18
5.7K0
[Python攻防] 一.获取Windows主机信息、注册表、U盘历史痕迹和回收站文件
声明:本人坚决反对利用教学方法进行恶意攻击的行为,一切错误的行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解技术背后的原理,更好地进行安全防护。虽然作者是一名安全小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在安全路上一起前行。
Eastmount
2021/12/02
2.7K0
[Python攻防] 一.获取Windows主机信息、注册表、U盘历史痕迹和回收站文件
查看Linux服务器硬件信息的操作命令
Linux服务器配置文档找不到,你还在为查询Linux服务器硬件信息发愁吗?学会这些命令,让你轻松查看Linux服务器的CPU,内存,硬盘,SN序列号等信息,根本就不用去机房。
用户9105998
2021/11/22
5.2K0
Python[7] :Python制作j
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
py3study
2020/01/06
3K0
Python[7] :Python制作j
C# 获取计算机相关信息
1. 在'解决方案资源管理器' 窗口中->右击项目-> '添加' -> '引用' 弹出引用管理器
用户7053485
2020/03/19
1.1K0
Linux系统获取硬件方面信息dmidecode命令
dmidecode命令可以让你在Linux系统下获取有关硬件方面的信息。dmidecode的作用是将DMI数据库中的信息解码,以可读的文本方式显示。由于DMI信息可以人为修改,因此里面的信息不一定是系统准确的信息。dmidecode遵循SMBIOS/DMI标准,其输出的信息包括BIOS、系统、主板、处理器、内存、缓存等等。
幻影龙王
2021/09/12
9K1
Linux系统获取硬件方面信息dmidecode命令
相关推荐
vmi:获取 windows 系统硬件信息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验