使用python進行雷電接口檢測
功能概述
這個Python腳本用于檢測系統(tǒng)的雷電(Thunderbolt)接口支持情況,包括:
檢測系統(tǒng)是否有雷電控制器
檢測Type-C/雷電端口
識別雷電接口版本(Thunderbolt 1-5)
顯示理論傳輸速度
列出已連接的雷電設(shè)備
代碼結(jié)構(gòu)
1. 基礎(chǔ)支持檢測函數(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)支持的雷電版本,返回版本號和對應(yīng)的理論速度:
- Thunderbolt 5: 80 Gbps (雙向), 最高120 Gbps (單向)
- Thunderbolt 4: 40 Gbps
- Thunderbolt 3: 40 Gbps
- Thunderbolt 2: 20 Gbps
- Thunderbolt 1: 10 Gbps
3. 詳細(xì)信息獲取函數(shù)
def get_detailed_thunderbolt_info() -> List[Dict[str, str]]
獲取所有已連接雷電設(shè)備的詳細(xì)信息,包括:
- 設(shè)備名稱
- 制造商信息
- 設(shè)備狀態(tài)
4. 狀態(tài)報告函數(shù)
def print_thunderbolt_status()
生成完整的雷電接口支持狀態(tài)報告,包括:
- 主機雷電支持情況
- 主機雷電版本信息
- 已連接設(shè)備列表
- 使用注意事項
使用方法
直接運行腳本:
python thunderbolt_check.py
作為模塊導(dǎo)入:
from thunderbolt_check import check_thunderbolt_support, get_thunderbolt_version # 檢查基本支持 support_info = check_thunderbolt_support() # 獲取版本信息 version_info = get_thunderbolt_version()
注意事項
1.實際傳輸速度取決于:
主機支持的雷電版本
連接設(shè)備支持的雷電版本
實際會以兩者中較低的速度運行
2.如果檢測結(jié)果顯示有雷電端口但未激活:
檢查BIOS設(shè)置中的雷電支持選項
確保已安裝最新的雷電驅(qū)動程序
3.版本速度對照表:
| 版本 | 理論速度 | 備注 |
|---|---|---|
| Thunderbolt 5 | 80/120 Gbps | 預(yù)計2024年底推出 |
| Thunderbolt 4 | 40 Gbps | 要求更嚴(yán)格的認(rèn)證 |
| Thunderbolt 3 | 40 Gbps | 最廣泛使用的版本 |
| Thunderbolt 2 | 20 Gbps | 較老的版本 |
| Thunderbolt 1 | 10 Gbps | 最早的版本 |
技術(shù)實現(xiàn)細(xì)節(jié)
使用subprocess模塊執(zhí)行WMI命令
通過正則表達(dá)式解析設(shè)備信息
支持中英文設(shè)備描述識別
異常處理確保程序穩(wěn)定運行
可能的錯誤和解決方案
“獲取雷電版本信息時出錯”
確保以管理員權(quán)限運行
檢查WMI服務(wù)是否正常運行
“未檢測到已連接的雷電設(shè)備”
確認(rèn)設(shè)備是否正確連接
檢查設(shè)備驅(qū)動是否正確安裝
完整代碼
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
# 檢查設(shè)備管理器中的雷電設(shè)備
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
# 檢查是否有正在工作的雷電設(shè)備
if "OK" in tb_devices or "正常" in tb_devices:
result['is_active'] = True
# 額外檢查 PCI 設(shè)備中的雷電控制器
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]]:
"""
獲取詳細(xì)的雷電接口信息
Returns:
List[Dict[str, str]]: 包含所有雷電設(shè)備信息的列表
"""
devices = []
try:
# 獲取所有可能的雷電相關(guān)設(shè)備
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: # 跳過標(biāo)題行
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"獲取詳細(xì)雷電信息時出錯: {e}")
return devices
def get_thunderbolt_version() -> Dict[str, str]:
"""
獲取雷電接口版本和速度信息
Returns:
Dict[str, str]: 包含雷電版本和速度信息的字典
"""
version_info = {
'version': 'Unknown',
'speed': 'Unknown'
}
try:
# 檢查設(shè)備管理器中的雷電設(shè)備描述
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']}")
# 獲取詳細(xì)信息
detailed_info = get_detailed_thunderbolt_info()
if detailed_info:
print("\n已連接的雷電設(shè)備:")
for idx, device in enumerate(detailed_info, 1):
print(f"\n設(shè)備 {idx}:")
if 'caption' in device:
print(f"- 設(shè)備名稱: {device['caption']}")
if 'manufacturer' in device:
print(f"- 制造商: {device['manufacturer']}")
if 'status' in device:
print(f"- 狀態(tài): {device['status']}")
else:
print("\n未檢測到已連接的雷電設(shè)備")
print("\n注意事項:")
if not support_info['has_controller']:
print("- 系統(tǒng)可能不支持雷電接口")
if support_info['has_port'] and not support_info['is_active']:
print("- 雷電接口存在但未激活,請檢查BIOS設(shè)置")
if support_info['has_controller'] and support_info['has_port']:
print("- 系統(tǒng)支持雷電接口,如遇問題請更新驅(qū)動")
print("- 實際傳輸速度取決于主機和設(shè)備支持的最低雷電版本")
if __name__ == "__main__":
print_thunderbolt_status()
到此這篇關(guān)于使用python進行雷電接口檢測的文章就介紹到這了,更多相關(guān)python雷電接口檢測內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python設(shè)置默認(rèn)編碼為utf8的方法
這篇文章主要介紹了Python設(shè)置默認(rèn)編碼為utf8的方法,結(jié)合實例形式分析了Python針對文件編碼的設(shè)置方法與相關(guān)注意事項,需要的朋友可以參考下2016-07-07
pyhton中__pycache__文件夾的產(chǎn)生與作用詳解
這篇文章主要介紹了pyhton中__pycache__文件夾的產(chǎn)生與作用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Python網(wǎng)絡(luò)爬蟲神器PyQuery的基本使用教程
這篇文章主要給大家介紹了關(guān)于Python網(wǎng)絡(luò)爬蟲神器PyQuery的基本使用教程,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)使用PyQuery具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02
python中進程間通信及設(shè)置狀態(tài)量控制另一個進程
這篇文章主要介紹了python中進程間通信及設(shè)置狀態(tài)量控制另一個進程,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05
python實現(xiàn)斐波那契數(shù)列的方法示例
每個碼農(nóng)大概都會用自己擅長的語言寫出一個斐波那契數(shù)列出來,斐波那契數(shù)列簡單地說,起始兩項為0和1,此后的項分別為它的前兩項之后。下面這篇文章就給大家詳細(xì)介紹了python實現(xiàn)斐波那契數(shù)列的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。2017-01-01

