使用python進(jìn)行雷電接口檢測
功能概述
這個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)報告,包括:
- 主機(jī)雷電支持情況
- 主機(jī)雷電版本信息
- 已連接設(shè)備列表
- 使用注意事項
使用方法
直接運(yùn)行腳本:
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.實際傳輸速度取決于:
主機(jī)支持的雷電版本
連接設(shè)備支持的雷電版本
實際會以兩者中較低的速度運(yùn)行
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)定運(yùn)行
可能的錯誤和解決方案
“獲取雷電版本信息時出錯”
確保以管理員權(quán)限運(yùn)行
檢查WMI服務(wù)是否正常運(yùn)行
“未檢測到已連接的雷電設(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主機(jī)雷電支持情況:") 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主機(jī)雷電版本信息:") 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("- 實際傳輸速度取決于主機(jī)和設(shè)備支持的最低雷電版本") if __name__ == "__main__": print_thunderbolt_status()
到此這篇關(guān)于使用python進(jìn)行雷電接口檢測的文章就介紹到這了,更多相關(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-07pyhton中__pycache__文件夾的產(chǎn)生與作用詳解
這篇文章主要介紹了pyhton中__pycache__文件夾的產(chǎn)生與作用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Python網(wǎng)絡(luò)爬蟲神器PyQuery的基本使用教程
這篇文章主要給大家介紹了關(guān)于Python網(wǎng)絡(luò)爬蟲神器PyQuery的基本使用教程,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)使用PyQuery具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02python中進(jìn)程間通信及設(shè)置狀態(tài)量控制另一個進(jìn)程
這篇文章主要介紹了python中進(jìn)程間通信及設(shè)置狀態(tài)量控制另一個進(jìn)程,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05python實現(xiàn)斐波那契數(shù)列的方法示例
每個碼農(nóng)大概都會用自己擅長的語言寫出一個斐波那契數(shù)列出來,斐波那契數(shù)列簡單地說,起始兩項為0和1,此后的項分別為它的前兩項之后。下面這篇文章就給大家詳細(xì)介紹了python實現(xiàn)斐波那契數(shù)列的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。2017-01-01