API 获取硬件信息详解
操作系统支持的硬件信息 API
不同操作系统提供不同的 API 或工具来获取硬件信息,以下是主流系统的实现方式:
操作系统 | 核心 API/工具 | 功能范围 |
---|---|---|
Windows | WMI (Windows Management Instrumentation) | CPU、内存、硬盘、主板、显卡等 |
Linux | /proc 文件系统、lscpu 、lshw 命令 | CPU、内存、硬盘、网络设备等 |
macOS | system_profiler 命令、IOKit 框架 | CPU、内存、硬盘、传感器等 |
跨平台 | psutil (Python 库)、System.Info (.NET) | 通用硬件信息(需依赖底层系统 API) |
主流编程语言实现方案
Python 实现(推荐 psutil
库)
核心功能
功能 | API 方法 | 返回值 |
---|---|---|
CPU 信息 | cpu_count(), cpu_freq() | 核心数、频率 |
内存信息 | virtual_memory() | 总内存、可用内存、使用率 |
硬盘信息 | disk_partitions(), disk_usage() | 分区列表、容量、挂载点 |
网络信息 | net_if_addrs() | IP 地址、网卡名称、掩码 |
传感器温度 | sensors_temperatures() | 仅支持部分 Linux 系统(需 lm-sensors ) |
示例代码
import psutil # 获取 CPU 信息 cpu_count = psutil.cpu_count(logical=False) # 物理核心数 cpu_freq = psutil.cpu_freq().max # 最大频率(MHz) # 获取内存信息 mem = psutil.virtual_memory() total_mem = mem.total / (1024 ** 3) # 转换为 GB # 获取硬盘信息 disk = psutil.disk_usage('/') disk_free = disk.free / (1024 ** 3) # 剩余空间(GB) print(f"CPU: {cpu_count} 核,最高频率 {cpu_freq}MHz") print(f"内存: {total_mem:.2f}GB,剩余 {disk_free:.2f}GB")
Windows WMI 查询(PowerShell/C#)
常用 WMI 类
WMI 类 | 功能 |
---|---|
Win32_Processor | CPU 型号、核心数、线程数 |
Win32_PhysicalMemory | 内存容量、插槽数量 |
Win32_DiskDrive | 硬盘型号、容量、序列号 |
Win32_NetworkAdapter | 网卡名称、MAC 地址、IP 配置 |
PowerShell 示例
# 获取 CPU 信息 Get-WmiObject -Class Win32_Processor | Select-Object Name, NumberOfCores, MaxClockSpeed # 获取硬盘信息 Get-WmiObject -Class Win32_DiskDrive | Select-Object Model, Size, SerialNumber
Linux 系统命令与文件
关键命令与文件
命令/文件 | 功能 |
---|---|
lscpu | 输出 CPU 详细信息(架构、核心数、频率) |
lshw | 列举所有硬件信息(需超级用户权限) |
/proc/meminfo | 内存使用详情(单位 kB) |
df -h | 磁盘分区容量与使用率 |
ifconfig | 网络接口配置(IP、MAC 地址) |
示例:解析 /proc/cpuinfo
# 提取 CPU 核心数 grep -m 1 "cpu cores" /proc/cpuinfo | awk '{print $4}' # 提取 CPU 型号 grep "model name" /proc/cpuinfo | head -n 1 | cut -d":" -f2 | xargs
注意事项
- 权限问题:
- Windows 部分 WMI 查询需要管理员权限。
- Linux 下
lshw
需使用sudo
。
- 跨平台兼容性:
- 推荐使用
psutil
(Python)或System.Info
(.NET)实现跨平台。
- 推荐使用
- 性能开销:
避免频繁调用硬件查询 API(如每秒多次),可能增加系统负载。
- 虚拟化环境限制:
在虚拟机中部分硬件信息(如主板型号、物理硬盘序列号)可能不可用。
相关问题与解答
问题 1:如何获取网络适配器的实时流量?
解答:
可使用 psutil.net_io_counters()
(Python)或 Get-WmiObject -Class Win32_NetworkAdapter
(PowerShell)。
示例(Python):
import psutil net = psutil.net_io_counters() print(f"发送流量: {net.bytes_sent / (1024 ** 2):.2f} MB") print(f"接收流量: {net.bytes_recv / (1024 ** 2):.2f} MB")
问题 2:如何检测 CPU 是否支持超线程技术?
解答:
- Windows:对比
Win32_Processor.NumberOfCores
(物理核心数)与Win32_ComputerSystem.NumberOfLogicalProcessors
(逻辑核心数),若逻辑核心数 > 物理核心数则支持超线程。 - Linux:通过
lscpu
命令查看Thread(s) per core
,若值大于
以上就是关于“api 获取硬件信息”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复