当前位置:

首页 > 编程开发 > Python实现获取Windows设备信息

Python实现获取Windows设备信息

Windows 11
Windows 11

Windows 11 是微软全新操作系统,现代化界面,流畅操作体验,适用于学习、工作与日常生活。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

立即下载
¥159
Windows 2026-08-17
正版软件 Windows 操作系统 Windows 11 Windows下载

Python获取Windows设备信息可通过uuid/socket获取MAC地址,但易受虚拟网卡干扰或随机化;推荐使用wmic获取主板硬件UUID作为稳定标识;wmi模块可获取CPU、主板、硬盘等底层信息;platform和psutil适用于系统概况及动态数据,需注意管理员权限与隐私合规。

1. 基础实现(常用但有局限)

用 Python 获取设备网络标识,最直接的办法就是借助 uuid 和 socket 这两个内置库。几行代码就能拿到 MAC 地址、主机名和 IP,看起来挺方便。

Python实现获取Windows设备信息

import uuid
import socket

# 获取 MAC 地址 (基于 getnode)
mac = uuid.UUID(int=uuid.getnode()).hex[-12:].upper()

# 获取主机名与 IP
hostname = socket.getfqdn(socket.gethostname())
ip_addr = socket.gethostbyname(hostname)

print(f"MAC: {mac}")
print(f"Host: {hostname}")
print(f"IP: {ip_addr}")

2. 核心问题:为什么 MAC 地址会变化?

如果你在本地装了 VMware 或 VirtualBox,而且之前脚本跑得好好的,某天突然发现输出的 MAC 地址不一样了——别慌,原因其实挺简单。

虚拟网卡的干扰

uuid.getnode() 本质上就是去读硬件地址。但虚拟机一装,系统里就多了好几个虚拟网卡(比如 VMnet1、VMnet8)。

  • 多网卡竞争:脚本可能随机抓到一个虚拟网卡的 MAC,而不是你物理网卡(WiFi/以太网)的那个。
  • 优先级变动:一旦物理网卡断开(比如拔了网线),系统可能会把虚拟网卡当成默认接口返回。

随机地址回退机制

依照 RFC 4122,如果 uuid.getnode() 死活拿不到真实的硬件地址,它就会随机生成一个 48 位的值来应付。

如何判断是不是随机地址?看 MAC 第一个字节的最低有效位。如果第二个字符是 1, 3, 5, 7, 9, B, D, F 中的一个,那就是随机生成的。

3. 更稳定的替代方案:硬件 UUID

如果目的就是唯一识别设备(比如做软件授权、设备指纹),那建议直接拿 Windows 主板的 UUID。这玩意儿不会因为网卡变动或虚拟机就翻脸。

推荐方案 (Python 调用 WMIC)

import subprocess

def get_windows_uuid():
    try:
        # 执行 wmic 命令获取主板唯一标识
        cmd = 'wmic path win32_computersystemproduct get uuid'
        uuid_str = subprocess.check_output(cmd, shell=True).decode().split('\n')[1].strip()
        return uuid_str
    except Exception as e:
        return f"Error: {e}"

print(f"设备硬件 UUID: {get_windows_uuid()}")

4. 总结与建议

标识符稳定性适用场景风险
MAC 地址一般网络通信、局域网识别易受虚拟机、多网卡、随机化影响
主机名低内部网络标识用户可随时更改
硬件 UUID极高软件授权、设备指纹需系统权限(通常 cmd 即可)

补充两点实操建议:

  • 在 Windows 上跑 Python 脚本,记得确认 Python 已加到系统变量 PATH 里。
  • 如果非要拿到物理网卡的 MAC,可以借助 psutil 库遍历所有网卡,把名字里带 "VMware" 或 "Virtual" 的过滤掉。

5. 知识扩展

在 Windows 环境里获取设备信息,最高效的手段其实是 WMI,它可以直接捅到系统底层硬件和软件的配置。Python 的 platform 和 psutil 模块则可以作为补充,捞一些基础的系统信息。

下面这张对比表,能帮你快速定位哪个方法最适合手头的任务:

主要实现方法对比

方法/工具核心原理主要优势潜在限制使用建议
WMI (wmi库)通过封装好的 API 访问 Windows 原生管理接口。功能最强大,能获取几乎所有系统信息(软件/硬件/配置)。需要安装第三方库。首选,用于获取CPU、主板、硬盘等底层硬件信息。
Win32 API (pywin32库)直接调用 Windows API,交互层级更低。灵活,能实现一些 WMI 不便或无法完成的操作。安装相对复杂,需要pywin32库。高级或特定场景的补充。
系统组件 (platform模块)Python 内置,跨平台,无需安装。无额外依赖,代码简单。功能有限,主要用于操作系统版本、计算机名、处理器架构等基础信息。获取通用系统信息,或用于跨平台代码中判断操作系统类型。
subprocess + WMIC调用 Windows 命令行工具 wmic,解析其输出。零额外依赖(除 subprocess)。输出为文本,需要解析,且 wmic 可能在未来的 Windows 版本中被弃用。需要基本的系统信息,但不能或不想安装 wmi 库的轻量级场景。
跨平台库 (psutil等)第三方库,提供跨平台的系统信息获取功能。跨平台(Windows/Linux/macOS),API 统一,获取实时数据能力强。可能获取不到某些特定硬件的底层序列号。需要监控CPU、内存、磁盘、网络等实时资源时作为重要补充。

详细代码示例及解析

准备工作:安装依赖库

非内置模块需要先用 pip 装好。建议用 python -m pip 保证安装到正确的 Python 环境。

# 建议使用 python -m pip 来确保安装到正确的 Python 环境
python -m pip install wmi pywin32 psutil

下面给出两种主流的实现方式,附带核心代码。

方式一:使用 wmi 模块(获取CPU、主板、硬盘信息)

这是 Windows 硬件信息获取最常用也是最强的路子。

import wmi
try:
    # 初始化WMI客户端
    c = wmi.WMI()
except wmi.x_wmi as e:
    print(f"初始化WMI失败: {e}")
    exit()
# 1. 获取CPU信息
print("\n[CPU信息]")
for cpu in c.Win32_Processor():
    # .Caption 或 .Name 通常包含CPU的完整型号
    print(f"  型号: {cpu.Name.strip()}")
    print(f"  核心数: {cpu.NumberOfCores}")
    print(f"  线程数: {cpu.NumberOfLogicalProcessors}")
# 2. 获取主板信息
print("\n[主板信息]")
for board in c.Win32_BaseBoard():
    # .Product 通常是主板的型号
    print(f"  型号: {board.Product}")
    # .Manufacturer 是制造商
    print(f"  制造商: {board.Manufacturer}")
# 3. 获取硬盘信息
print("\n[硬盘信息]")
for disk in c.Win32_DiskDrive():
    # .Model 是硬盘型号,.SerialNumber 是唯一的序列号
    print(f"  型号: {disk.Model}")
    print(f"  序列号: {disk.SerialNumber}")
    print(f"  大小: {int(disk.Size) // (1024**3)} GB")

代码解析:

  • c = wmi.WMI() 建立与 Windows 管理规范的连接,后续所有查询都靠它。
  • Win32_Processor、Win32_BaseBoard、Win32_DiskDrive 是 WMI 里查询 CPU、主板、硬盘的类。
  • 换个类名就能查别的硬件,比如 Win32_PhysicalMemory 查内存条。

方式二:结合 platform 和 psutil 获取系统概况

这两个库主要用来拿系统概要信息和实时运行状态,跨平台能力很强。

import psutil
import platform
print("[操作系统信息]")
# platform.system() 获取操作系统名称,如 'Windows', 'Linux'[reference:12]
print(f"  系统: {platform.system()}")
# platform.release() 获取操作系统的主版本号[reference:13]
print(f"  版本: {platform.release()}")
# platform.processor() 获取处理器的信息字符串
print(f"  处理器标识: {platform.processor()}")
print(f"  计算机名: {platform.node()}")
print(f"  系统架构: {platform.machine()}")
print("\n[系统运行状态]")
# psutil.virtual_memory().total 获取系统总内存,单位是字节,需要转换为合适的单位。
total_memory = psutil.virtual_memory().total
print(f"  总内存: {total_memory // (1024**3)} GB")
# psutil.disk_usage('/') 获取根目录的磁盘使用情况。你可以改变路径来查看其他盘符。
disk = psutil.disk_usage('/')
print(f"  磁盘 (C:): 总计 {disk.total // (1024**3)}GB, 已用 {disk.used // (1024**3)}GB")

关键点:

  • platform 模块是跨平台系统信息的基础。
  • psutil 在动态数据上很出色,比如 psutil.virtual_memory() 和 psutil.disk_usage() 能实时反映内存和磁盘使用情况。

方式三:使用 uuid 模块生成唯一设备标识符

这个方法不是列硬件清单,而是生成一个相对稳定的设备唯一码,常见于软件授权场景。

import uuid
# 获取计算机的MAC地址并生成一个UUID[reference:16]
node_uuid = uuid.UUID(int=uuid.getnode())
# 取UUID的后12位作为机器码
machine_code = node_uuid.hex[-12:]
print(f"\n[生成的机器码]")
print(f"  唯一ID: {machine_code}")

核心要点:该方法依赖 MAC 地址,网卡变或 MAC 被改,ID 就会变。想更稳定,可以调系统工具(如 wmic csproduct get uuid)拿主板 UUID。

注意事项与安全警示

代码写得好,还要注意错误处理和权限——这是让程序靠谱的常识。

  • 管理员权限:有些硬件信息(比如硬盘序列号)必须用管理员权限跑脚本才能拿到,否则可能返回 None 或直接报错。
  • 虚拟机环境:在虚拟机里拿到的硬件序列号往往是虚拟化软件模拟的固定值,多台机器可能会一模一样。
  • 错误处理:务必用 try...except 包住 WMI 初始化、注册表查询等容易出错的步骤。
  • 隐私合规:收集、传输硬件信息之前,必须告知用户并征得同意,否则容易踩隐私法规的红线。
  • 兼容性预案:wmic 命令行工具可能在后续 Windows 版本中被移除。建议把 wmic 调用封装成函数,后续方便平滑迁移到 Get-WmiObject 等 PowerShell 命令。

以上几种方法各有侧重,实际开发时可以根据场景灵活选用。如果需要针对特定硬件(比如内存条、显卡)的查询,可以进一步细化代码。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 Windows
相关文章 更多
ServBay安装配置详细教程与操作指南
ServBay安装配置详细教程与操作指南

新手入门 ServBay 本地开发环境,详解安装包下载、Dashboard 状态监控、Packages 组件安装、Services 服务控制及 Websites 项目配置。掌握 .servbay.config 版本管理与日志排查技巧,快速搭建稳定的 PHP、Node.js 等多语言开发环境。

windows如何卸载软件干净彻底清理残留教程
windows如何卸载软件干净彻底清理残留教程

想在Windows中干净卸载软件?本文详解从设置面板卸载、清理AppData配置、移除启动项及处理卸载失败的完整步骤,避免直接删除文件夹带来的残留问题。

windows系统安装教程详细步骤全过程图文指南
windows系统安装教程详细步骤全过程图文指南

详细讲解Windows系统安装步骤,包括使用Media Creation Tool制作启动U盘、BIOS/UEFI启动设置、磁盘分区选择及驱动激活检查。区分就地重装与全新安装,帮助用户安全完成系统部署。

如何在计算机上删除 linux 并安装 windows
如何在计算机上删除 linux 并安装 windows

想从 Linux 换回 Windows?本文详解制作安装介质、进入 BIOS/UEFI 启动菜单、删除 Linux 分区及安装 Windows 的全过程。重点提示数据备份与磁盘确认,避免误删其他硬盘数据。

codekit环境配置指南从安装到环境搭建完整教程
codekit环境配置指南从安装到环境搭建完整教程

详解 CodeKit 在 macOS 下的安装步骤、项目导入方法、Sass与JavaScript编译设置及浏览器自动刷新功能,助您快速搭建高效的前端开发环境。

windows显示语言为什么改不了中文及解决方法
windows显示语言为什么改不了中文及解决方法

遇到Windows界面无法切换为中文的情况?本文详解如何区分输入法与显示语言,排查单一语言版本限制,正确安装中文语言包并解决下载失败问题,助您快速恢复中文界面。

windows安装配置jmeter完整步骤教程
windows安装配置jmeter完整步骤教程

想在Windows上快速上手JMeter?本文提供从Java环境检查、环境变量配置、JMeter下载解压到启动运行的详细实操步骤,包含关键设置验证与常见问题排查,助你顺利搭建性能测试环境。

Windows11文件夹打开卡顿优化设置方案
Windows11文件夹打开卡顿优化设置方案

Win11打开文件夹转圈卡顿?本文详解如何通过关闭首页历史、调整缩略图预览、排查云盘同步及重建索引来优化资源管理器响应速度,操作简单且安全。

Windows11固态硬盘优化关闭磁盘碎片整理
Windows11固态硬盘优化关闭磁盘碎片整理

担心Windows 11自动优化损伤固态硬盘?本教程教你先确认磁盘类型为SSD,再进入优化驱动器设置关闭自动计划,同时解析TRIM机制与传统碎片整理的区别,确保存储健康。

Windows10升级安装不丢失软件设置方法
Windows10升级安装不丢失软件设置方法

想在重装 Windows 10 时不丢失软件和设置?本教程演示如何在当前系统中运行 setup.exe 并正确选择“保留个人文件和应用”,区分升级安装与全新安装,确保数据安全。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件
macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

Mac软件 更多
Figma macOS版
Figma macOS版
Mac

Figma 是面向产品团队的界面与原型设计平台,Mac 客户端支持 Intel 和 Apple 芯片,可直接调用本机字体。它将矢量绘制、自动布局、组件库、交互原型、评论及多人实时编辑集中在统一工作区。

Final Cut Pro macOS版
Final Cut Pro macOS版
Mac

Final Cut Pro 是 Apple 面向 Mac 用户推出的专业视频剪辑软件,提供磁性时间线、媒体资源库、多机位剪辑、字幕生成、对象跟踪、调色、音频处理和多格式输出等工具。软件针对 Apple 芯片优化。

FreeCAD macOS版
FreeCAD macOS版
Mac

FreeCAD是一款免费开源的三维参数化建模软件,可通过草图、约束和特征历史构建尺寸精确且便于修改的模型。软件提供零件设计、装配、工程制图、建筑信息模型、有限元分析、数控加工及三维打印等工作台,并支持插件、宏和Python脚本扩展。

WINDOWS 更多
3dmax(3ds max)
3dmax(3ds max)
Windows

Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

photoshop
photoshop
Windows、macOS 、 iPad

Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

Blender
Blender
Windows、macOS 和 Linux

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

即将离开本站
您即将前往第三方网站,请确认是否继续?