雷电接口检测工具说明文档
功能概述
这个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, Tuple
def 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'] = True
except Exception as e:
print(f"检查雷电支持时出错: {e}")
return result
def 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 devices
def 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_info
def 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()