[原] Python 获取Windows全部硬盘名称

本文介绍了一个在Windows操作系统下获取所有硬盘分区编号的Python函数。该函数使用psutil库来列出所有分区,并按字母顺序排序返回分区列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# Windows操作系统下,返回全部硬盘编号['C:\','D:\']
def winDrivers():
    """
    Windows操作系统下,返回全部硬盘编号['C:\','D:\']
    :return: list
    """
    return sorted([driver.device for driver in psutil.disk_partitions(True)])

 

* 只在Windows下可用

<think>好的,用户想要通过Python脚本获取Windows硬盘的PCIe信息。我需要想一下怎么实现这个。首先,得明确PCIe信息具体指什么,比如厂商、设备ID、通道数、版本等。在Windows系统下,通常可以通过WMI或者调用系统命令来获取硬件信息。 记得WMI(Windows Management Instrumentation)是Windows管理的核心技术,可以查询系统信息。Python中有wmi模块,可以用来访问这些数据。所以可能需要安装pywin32和WMI模块。用户可能需要先运行pip install wmi和pip install pywin32。 然后,通过WMI查询Win32_PnPEntity或者Win32_PnPSignedDriver类来找到存储控制器的信息。但可能需要更精确的类,比如Win32_IDEController或者Win32_SCSIController,不过这可能不够,因为PCIe设备可能属于其他类别。可能需要查找关联的PCI设备的信息。 另一个方法是使用系统命令,比如在cmd中运行wmic path Win32_PnPEntity get,或者使用PowerShell的Get-PnpDevice命令。然后通过Python的subprocess模块来执行这些命令并解析输出结果。比如,运行wmic path Win32_PnPEntity where "Service='storahci'" get 来获取存储控制器信息,或者查找名称中包含NVMe的设备,因为NVMe通常使用PCIe接口。 或者,可以调用Windows的API,比如SetupAPI,来枚举PCI设备。这可能更复杂,需要用到ctypes或者pywin32的API封装。不过对于Python脚本来说,可能更倾向于使用现有的模块或命令行工具的输出解析。 总结一下可能的步骤: 1. 使用WMI查询相关的设备类,过滤出存储控制器,特别是NVMe的设备,因为它们使用PCIe。 2. 解析设备信息中的硬件ID,从中提取PCIe的相关信息,如厂商ID、设备ID等。 3. 或者执行系统命令(如wmic或PowerShell),捕获输出并提取所需信息。 需要注意权限问题,可能需要以管理员权限运行脚本才能获取某些信息。此外,不同硬件可能返回的信息格式不同,需要处理可能的异常情况。 现在具体实现的话,比如用WMI模块查询Win32_PnPEntity,然后筛选出Service为'storahci'或者名称中包含NVMe的实例。例如: import wmi c = wmi.WMI() for item in c.Win32_PnPEntity(): if 'NVMe' in item.Name: print(item.Name, item.HardwareID) 或者通过wmic命令,使用subprocess获取信息: import subprocess result = subprocess.check_output('wmic path Win32_PnPEntity where "Service=\'storahci\'" get /format:list', shell=True) print(result.decode()) 但这样的输出需要解析,可能比较麻烦。或者使用更精确的查询条件。 另外,还可以考虑使用第三方库如psutil,但psutil主要处理进程和系统资源,可能不涉及硬件信息。所以可能需要回到WMI或者直接读取注册表,但注册表操作比较复杂。 可能的代码示例: 使用wmi模块获取NVMe控制器的信息: import wmi c = wmi.WMI() for controller in c.Win32_IDEController(): print(controller.Name) # 检查是否是NVMe设备 不过可能不准确,因为Win32_IDEController可能不包括NVMe设备。所以更好的方法是查询Win32_PnPEntity并过滤名称或硬件ID中包含PCI的信息。 例如: for item in c.Win32_PnPEntity(): if item.Name and ('PCI' in item.Name or 'NVMe' in item.Name): print(f"Device Name: {item.Name}") print(f"Hardware IDs: {item.HardwareID}") # 解析HardwareID中的VEN和DEV代码 每个设备的HardwareID通常包含VEN_xxxx和DEV_xxxx,分别代表厂商和设备ID。例如,VEN_1CC1&DEV_8201可能对应某个厂商的PCIe设备。 但这样可能无法直接获取PCIe的通道数或版本信息。这时候可能需要其他方法,比如通过读取系统信息文件或调用更底层的API。或者,可能需要借助第三方工具的信息,比如使用CrystalDiskInfo的命令行输出,但这可能超出纯Python脚本的范畴。 另外,Windows的PowerShell命令Get-PnpDevice可能有更详细的信息。例如: Get-PnpDevice -Class 'SCSIAdapter', 'HDC' | Where-Object { $_.FriendlyName -like '*NVMe*' } 在Python中,可以通过subprocess调用PowerShell并解析输出: command = 'powershell "Get-PnpDevice -Class SCSIAdapter, HDC | Where-Object { $_.FriendlyName -like \'*NVMe*\' } | Select-Object FriendlyName, Status, HardwareID | Format-List"' output = subprocess.check_output(command, shell=True, text=True) print(output) 这样可以得到更结构化的信息,但解析起来可能需要处理多行字符串。或者输出为JSON格式,更方便处理: command = 'powershell "Get-PnpDevice -Class SCSIAdapter, HDC | Where-Object { $_.FriendlyName -like \'*NVMe*\' } | ConvertTo-Json"' output = subprocess.check_output(command, shell=True, text=True) import json devices = json.loads(output) for device in devices: print(device['FriendlyName'], device['HardwareID']) 但要注意PowerShell的版本和权限问题。 如果用户需要更详细的信息,比如PCIe的版本和通道数,可能需要访问设备的特定属性或使用厂商提供的工具。例如,NVMe设备的详细信息可以通过Windows的NVMe CLI工具获取,但需要安装额外软件,这可能不符合纯Python脚本的要求。 总结,通过Python获取PCIe信息的方法主要是通过WMI查询或执行系统命令并解析结果。这可能无法获取所有详细信息,但可以获取设备名称、硬件ID等基本信息。</think>要获取Windows硬盘的PCIe信息,可以通过Python调用WMI或执行系统命令实现。以下是具体方法和代码示例: ### 方法1:使用WMI模块查询设备信息 ```python import wmi c = wmi.WMI() # 查找名称包含NVMe或PCI的存储控制器 for device in c.Win32_PnPEntity(): if device.Name and ("NVMe" in device.Name or "PCI" in device.Name): print(f"设备名称: {device.Name}") print(f"硬件ID: {device.HardwareID}") print("-" * 50) ``` ### 方法2:通过subprocess调用PowerShell命令 ```python import subprocess import json # 执行PowerShell命令获取NVMe设备信息 command = ''' Get-PnpDevice -Class SCSIAdapter, HDC | Where-Object { $_.FriendlyName -like '*NVMe*' } | Select-Object FriendlyName, Status, HardwareID | ConvertTo-Json ''' output = subprocess.check_output(["powershell", "-Command", command], text=True) # 解析JSON输出 try: devices = json.loads(output) for device in devices: print(f"设备名称: {device['FriendlyName']}") print(f"硬件ID: {device['HardwareID']}") print("-" * 50) except json.JSONDecodeError: print("未找到相关设备或输出解析失败") ``` ### 解释 1. **WMI查询**:通过`Win32_PnPEntity`类筛选名称包含`NVMe`或`PCI`的设备,这些设备通常与PCIe接口相关。 2. **PowerShell命令**:使用`Get-PnpDevice`筛选存储控制器类别(`SCSIAdapter`和`HDC`),并解析返回的JSON数据。 3. **硬件ID**:包含厂商ID(`VEN_XXXX`)和设备ID(`DEV_XXXX`),可用于进一步查询详细信息。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值