使用python進行雷電接口檢測
功能概述
這個Python腳本用于檢測系統(tǒng)的雷電(Thunderbolt)接口支持情況,包括:
檢測系統(tǒng)是否有雷電控制器
檢測Type-C/雷電端口
識別雷電接口版本(Thunderbolt 1-5)
顯示理論傳輸速度
列出已連接的雷電設備
代碼結構
1. 基礎支持檢測函數(shù)
def check_thunderbolt_support() -> Dict[str, bool]
這個函數(shù)通過Windows Management Instrumentation (WMI)命令檢查系統(tǒng)的雷電支持情況,返回一個包含以下信息的字典:
has_controller: 是否存在雷電控制器
has_port: 是否有Type-C/雷電端口
is_active: 雷電接口是否處于激活狀態(tài)
2. 版本檢測函數(shù)
def get_thunderbolt_version() -> Dict[str, str]
識別系統(tǒng)支持的雷電版本,返回版本號和對應的理論速度:
- Thunderbolt 5: 80 Gbps (雙向), 最高120 Gbps (單向)
- Thunderbolt 4: 40 Gbps
- Thunderbolt 3: 40 Gbps
- Thunderbolt 2: 20 Gbps
- Thunderbolt 1: 10 Gbps
3. 詳細信息獲取函數(shù)
def get_detailed_thunderbolt_info() -> List[Dict[str, str]]
獲取所有已連接雷電設備的詳細信息,包括:
- 設備名稱
- 制造商信息
- 設備狀態(tài)
4. 狀態(tài)報告函數(shù)
def print_thunderbolt_status()
生成完整的雷電接口支持狀態(tài)報告,包括:
- 主機雷電支持情況
- 主機雷電版本信息
- 已連接設備列表
- 使用注意事項
使用方法
直接運行腳本:
python thunderbolt_check.py
作為模塊導入:
from thunderbolt_check import check_thunderbolt_support, get_thunderbolt_version # 檢查基本支持 support_info = check_thunderbolt_support() # 獲取版本信息 version_info = get_thunderbolt_version()
注意事項
1.實際傳輸速度取決于:
主機支持的雷電版本
連接設備支持的雷電版本
實際會以兩者中較低的速度運行
2.如果檢測結果顯示有雷電端口但未激活:
檢查BIOS設置中的雷電支持選項
確保已安裝最新的雷電驅動程序
3.版本速度對照表:
| 版本 | 理論速度 | 備注 |
|---|---|---|
| Thunderbolt 5 | 80/120 Gbps | 預計2024年底推出 |
| Thunderbolt 4 | 40 Gbps | 要求更嚴格的認證 |
| Thunderbolt 3 | 40 Gbps | 最廣泛使用的版本 |
| Thunderbolt 2 | 20 Gbps | 較老的版本 |
| Thunderbolt 1 | 10 Gbps | 最早的版本 |
技術實現(xiàn)細節(jié)
使用subprocess模塊執(zhí)行WMI命令
通過正則表達式解析設備信息
支持中英文設備描述識別
異常處理確保程序穩(wěn)定運行
可能的錯誤和解決方案
“獲取雷電版本信息時出錯”
確保以管理員權限運行
檢查WMI服務是否正常運行
“未檢測到已連接的雷電設備”
確認設備是否正確連接
檢查設備驅動是否正確安裝
完整代碼
import subprocess
import re
from typing import Dict, List, Tuple
def check_thunderbolt_support() -> Dict[str, bool]:
"""
檢查系統(tǒng)是否支持雷電接口
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()
# 根據(jù)描述判斷版本
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():
"""
打印雷電接口支持狀態(tài)報告
"""
print("=" * 50)
print("雷電接口支持狀態(tài)檢查報告")
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"- 雷電接口狀態(tài): {'? 已激活' 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"- 狀態(tài): {device['status']}")
else:
print("\n未檢測到已連接的雷電設備")
print("\n注意事項:")
if not support_info['has_controller']:
print("- 系統(tǒng)可能不支持雷電接口")
if support_info['has_port'] and not support_info['is_active']:
print("- 雷電接口存在但未激活,請檢查BIOS設置")
if support_info['has_controller'] and support_info['has_port']:
print("- 系統(tǒng)支持雷電接口,如遇問題請更新驅動")
print("- 實際傳輸速度取決于主機和設備支持的最低雷電版本")
if __name__ == "__main__":
print_thunderbolt_status()
到此這篇關于使用python進行雷電接口檢測的文章就介紹到這了,更多相關python雷電接口檢測內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python實現(xiàn)按任意鍵繼續(xù)執(zhí)行程序
本文給大家分享的是如何使用Python腳本實現(xiàn)按任意鍵繼續(xù)執(zhí)行程序的代碼,非常的簡單實用,有需要的小伙伴可以參考下2016-12-12
python?(pyqt)?表格顯示圖片的實現(xiàn)方式
這篇文章主要介紹了python?(pyqt)?表格顯示圖片的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
詳解Python最長公共子串和最長公共子序列的實現(xiàn)
這篇文章主要介紹了詳解Python最長公共子串和最長公共子序列的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07

