雷电接口检测工具说明文档
功能概述
这个Python脚本用于检测系统的雷电(Thunderbolt)接口支持情况,包括:
- 检测系统是否有雷电控制器
- 检测Type-C/雷电端口
- 识别雷电接口版本(Thunderbolt 1-5)
- 显示理论传输速度
- 列出已连接的雷电设备
代码结构
1. 基础支持检测函数
def check_thunderbolt_support() -> Dict[str, bool]
这个函数通过Windows Management Instrumentation (WMI)命令检查系统的雷电支持情况,返回一个包含以下信息的字典:
has_controller
: 是否存在雷电控制器has_port
: 是否有Type-C/雷电端口is_active
: 雷电接口是否处于激活状态
2. 版本检测函数
def get_thunderbolt_version() -> Dict[str, str]
识别系统支持的雷电版本,返回版本号和对应的理论速度:
- Thunderbolt 5: 80 Gbps (双向), 最高120 Gbps (单向)
- Thunderbolt 4: 40 Gbps
- Thunderbolt 3: 40 Gbps
- Thunderbolt 2: 20 Gbps
- Thunderbolt 1: 10 Gbps
3. 详细信息获取函数
def get_detailed_thunderbolt_info() -> List[Dict[str, str]]
获取所有已连接雷电设备的详细信息,包括:
- 设备名称
- 制造商信息
- 设备状态
4. 状态报告函数
def print_thunderbolt_status()
生成完整的雷电接口支持状态报告,包括:
- 主机雷电支持情况
- 主机雷电版本信息
- 已连接设备列表
- 使用注意事项
使用方法
- 直接运行脚本:
python thunderbolt_check.py
- 作为模块导入:
from thunderbolt_check import check_thunderbolt_support, get_thunderbolt_version# 检查基本支持
support_info = check_thunderbolt_support()# 获取版本信息
version_info = get_thunderbolt_version()
注意事项
-
实际传输速度取决于:
- 主机支持的雷电版本
- 连接设备支持的雷电版本
- 实际会以两者中较低的速度运行
-
如果检测结果显示有雷电端口但未激活:
- 检查BIOS设置中的雷电支持选项
- 确保已安装最新的雷电驱动程序
-
版本速度对照表:
版本 理论速度 备注 Thunderbolt 5 80/120 Gbps 预计2024年底推出 Thunderbolt 4 40 Gbps 要求更严格的认证 Thunderbolt 3 40 Gbps 最广泛使用的版本 Thunderbolt 2 20 Gbps 较老的版本 Thunderbolt 1 10 Gbps 最早的版本
技术实现细节
- 使用
subprocess
模块执行WMI命令 - 通过正则表达式解析设备信息
- 支持中英文设备描述识别
- 异常处理确保程序稳定运行
可能的错误和解决方案
-
“获取雷电版本信息时出错”
- 确保以管理员权限运行
- 检查WMI服务是否正常运行
-
“未检测到已连接的雷电设备”
- 确认设备是否正确连接
- 检查设备驱动是否正确安装
代码:
import subprocess
import re
from typing import Dict, List, Tupledef check_thunderbolt_support() -> Dict[str, bool]:"""检查系统是否支持雷电接口Returns:Dict[str, bool]: 包含雷电接口支持信息的字典{'has_controller': bool, # 是否有雷电控制器'has_port': bool, # 是否有雷电端口'is_active': bool # 雷电接口是否激活}"""result = {'has_controller': False,'has_port': False,'is_active': False}try:# 检查 USB 控制器中的 Type-C 和雷电支持usb_controllers = subprocess.check_output(["wmic", "path", "Win32_USBController", "get", "name,manufacturer"], encoding='gbk').strip()if "Type-C" in usb_controllers:result['has_port'] = True# 检查设备管理器中的雷电设备tb_devices = subprocess.check_output(["wmic", "path", "Win32_PnPEntity", "where", "caption like '%Thunderbolt%' OR caption like '%雷电%'", "get", "caption,status"], encoding='gbk').strip()if tb_devices and len(tb_devices.split('\n')) > 1:result['has_controller'] = True# 检查是否有正在工作的雷电设备if "OK" in tb_devices or "正常" in tb_devices:result['is_active'] = True# 额外检查 PCI 设备中的雷电控制器pci_devices = subprocess.check_output(["wmic", "path", "Win32_PnPEntity", "where", "deviceid like '%PCI%'", "get", "caption"],encoding='gbk').strip()if any(x in pci_devices.lower() for x in ['thunderbolt', '雷电']):result['has_controller'] = Trueexcept Exception as e:print(f"检查雷电支持时出错: {e}")return resultdef get_detailed_thunderbolt_info() -> List[Dict[str, str]]:"""获取详细的雷电接口信息Returns:List[Dict[str, str]]: 包含所有雷电设备信息的列表"""devices = []try:# 获取所有可能的雷电相关设备cmd_output = subprocess.check_output(["wmic", "path", "Win32_PnPEntity", "where","caption like '%Thunderbolt%' OR caption like '%雷电%' OR caption like '%Type-C%'","get", "caption,manufacturer,status,deviceid"],encoding='gbk').strip()# 解析输出lines = cmd_output.split('\n')if len(lines) > 1: # 跳过标题行headers = [h.strip().lower() for h in lines[0].split(' ') if h.strip()]for line in lines[1:]:if line.strip():# 使用多个空格分割并过滤空字符串values = [v.strip() for v in re.split(r'\s{2,}', line) if v.strip()]if len(values) >= len(headers):device = dict(zip(headers, values))devices.append(device)except Exception as e:print(f"获取详细雷电信息时出错: {e}")return devicesdef get_thunderbolt_version() -> Dict[str, str]:"""获取雷电接口版本和速度信息Returns:Dict[str, str]: 包含雷电版本和速度信息的字典"""version_info = {'version': 'Unknown','speed': 'Unknown'}try:# 检查设备管理器中的雷电设备描述tb_devices = subprocess.check_output(["wmic", "path", "Win32_PnPEntity", "where","caption like '%Thunderbolt%' or caption like '%雷电%'","get", "caption,description"],encoding='gbk').strip()# 根据描述判断版本if 'Thunderbolt 5' in tb_devices or '雷电 5' in tb_devices:version_info['version'] = 'Thunderbolt 5'version_info['speed'] = '80 Gbps (双向), 最高120 Gbps (单向)'elif 'Thunderbolt 4' in tb_devices or '雷电 4' in tb_devices:version_info['version'] = 'Thunderbolt 4'version_info['speed'] = '40 Gbps'elif 'Thunderbolt 3' in tb_devices or '雷电 3' in tb_devices:version_info['version'] = 'Thunderbolt 3'version_info['speed'] = '40 Gbps'elif 'Thunderbolt 2' in tb_devices or '雷电 2' in tb_devices:version_info['version'] = 'Thunderbolt 2'version_info['speed'] = '20 Gbps'elif 'Thunderbolt' in tb_devices or '雷电' in tb_devices:version_info['version'] = 'Thunderbolt 1'version_info['speed'] = '10 Gbps'except Exception as e:print(f"获取雷电版本信息时出错: {e}")return version_infodef print_thunderbolt_status():"""打印雷电接口支持状态报告"""print("=" * 50)print("雷电接口支持状态检查报告")print("=" * 50)# 检查基本支持情况support_info = check_thunderbolt_support()print("\n主机雷电支持情况:")print(f"- 雷电控制器: {'✓ 已找到' if support_info['has_controller'] else '✗ 未找到'}")print(f"- Type-C/雷电端口: {'✓ 存在' if support_info['has_port'] else '✗ 不存在'}")print(f"- 雷电接口状态: {'✓ 已激活' if support_info['is_active'] else '✗ 未激活'}")# 获取并显示版本信息version_info = get_thunderbolt_version()print(f"\n主机雷电版本信息:")print(f"- 版本: {version_info['version']}")print(f"- 理论速度: {version_info['speed']}")# 获取详细信息detailed_info = get_detailed_thunderbolt_info()if detailed_info:print("\n已连接的雷电设备:")for idx, device in enumerate(detailed_info, 1):print(f"\n设备 {idx}:")if 'caption' in device:print(f"- 设备名称: {device['caption']}")if 'manufacturer' in device:print(f"- 制造商: {device['manufacturer']}")if 'status' in device:print(f"- 状态: {device['status']}")else:print("\n未检测到已连接的雷电设备")print("\n注意事项:")if not support_info['has_controller']:print("- 系统可能不支持雷电接口")if support_info['has_port'] and not support_info['is_active']:print("- 雷电接口存在但未激活,请检查BIOS设置")if support_info['has_controller'] and support_info['has_port']:print("- 系统支持雷电接口,如遇问题请更新驱动")print("- 实际传输速度取决于主机和设备支持的最低雷电版本")if __name__ == "__main__":print_thunderbolt_status()