使用python進(jìn)行雷電接口檢測(cè)
功能概述
這個(gè)Python腳本用于檢測(cè)系統(tǒng)的雷電(Thunderbolt)接口支持情況,包括:
檢測(cè)系統(tǒng)是否有雷電控制器
檢測(cè)Type-C/雷電端口
識(shí)別雷電接口版本(Thunderbolt 1-5)
顯示理論傳輸速度
列出已連接的雷電設(shè)備
代碼結(jié)構(gòu)
1. 基礎(chǔ)支持檢測(cè)函數(shù)
def check_thunderbolt_support() -> Dict[str, bool]
這個(gè)函數(shù)通過(guò)Windows Management Instrumentation (WMI)命令檢查系統(tǒng)的雷電支持情況,返回一個(gè)包含以下信息的字典:
has_controller: 是否存在雷電控制器
has_port: 是否有Type-C/雷電端口
is_active: 雷電接口是否處于激活狀態(tài)
2. 版本檢測(cè)函數(shù)
def get_thunderbolt_version() -> Dict[str, str]
識(shí)別系統(tǒng)支持的雷電版本,返回版本號(hào)和對(duì)應(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è)備名稱(chēng)
- 制造商信息
- 設(shè)備狀態(tài)
4. 狀態(tài)報(bào)告函數(shù)
def print_thunderbolt_status()
生成完整的雷電接口支持狀態(tài)報(bào)告,包括:
- 主機(jī)雷電支持情況
- 主機(jī)雷電版本信息
- 已連接設(shè)備列表
- 使用注意事項(xiàng)
使用方法
直接運(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()
注意事項(xiàng)
1.實(shí)際傳輸速度取決于:
主機(jī)支持的雷電版本
連接設(shè)備支持的雷電版本
實(shí)際會(huì)以兩者中較低的速度運(yùn)行
2.如果檢測(cè)結(jié)果顯示有雷電端口但未激活:
檢查BIOS設(shè)置中的雷電支持選項(xiàng)
確保已安裝最新的雷電驅(qū)動(dòng)程序
3.版本速度對(duì)照表:
| 版本 | 理論速度 | 備注 |
|---|---|---|
| Thunderbolt 5 | 80/120 Gbps | 預(yù)計(jì)2024年底推出 |
| Thunderbolt 4 | 40 Gbps | 要求更嚴(yán)格的認(rèn)證 |
| Thunderbolt 3 | 40 Gbps | 最廣泛使用的版本 |
| Thunderbolt 2 | 20 Gbps | 較老的版本 |
| Thunderbolt 1 | 10 Gbps | 最早的版本 |
技術(shù)實(shí)現(xiàn)細(xì)節(jié)
使用subprocess模塊執(zhí)行WMI命令
通過(guò)正則表達(dá)式解析設(shè)備信息
支持中英文設(shè)備描述識(shí)別
異常處理確保程序穩(wěn)定運(yùn)行
可能的錯(cuò)誤和解決方案
“獲取雷電版本信息時(shí)出錯(cuò)”
確保以管理員權(quán)限運(yùn)行
檢查WMI服務(wù)是否正常運(yùn)行
“未檢測(cè)到已連接的雷電設(shè)備”
確認(rèn)設(shè)備是否正確連接
檢查設(shè)備驅(qū)動(dòng)是否正確安裝
完整代碼
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"檢查雷電支持時(shí)出錯(cuò): {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: # 跳過(guò)標(biāo)題行
headers = [h.strip().lower() for h in lines[0].split(' ') if h.strip()]
for line in lines[1:]:
if line.strip():
# 使用多個(gè)空格分割并過(guò)濾空字符串
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ì)雷電信息時(shí)出錯(cuò): {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"獲取雷電版本信息時(shí)出錯(cuò): {e}")
return version_info
def print_thunderbolt_status():
"""
打印雷電接口支持狀態(tài)報(bào)告
"""
print("=" * 50)
print("雷電接口支持狀態(tài)檢查報(bào)告")
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è)備名稱(chēng): {device['caption']}")
if 'manufacturer' in device:
print(f"- 制造商: {device['manufacturer']}")
if 'status' in device:
print(f"- 狀態(tài): {device['status']}")
else:
print("\n未檢測(cè)到已連接的雷電設(shè)備")
print("\n注意事項(xiàng):")
if not support_info['has_controller']:
print("- 系統(tǒng)可能不支持雷電接口")
if support_info['has_port'] and not support_info['is_active']:
print("- 雷電接口存在但未激活,請(qǐng)檢查BIOS設(shè)置")
if support_info['has_controller'] and support_info['has_port']:
print("- 系統(tǒng)支持雷電接口,如遇問(wèn)題請(qǐng)更新驅(qū)動(dòng)")
print("- 實(shí)際傳輸速度取決于主機(jī)和設(shè)備支持的最低雷電版本")
if __name__ == "__main__":
print_thunderbolt_status()
到此這篇關(guān)于使用python進(jìn)行雷電接口檢測(cè)的文章就介紹到這了,更多相關(guān)python雷電接口檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于pandas.DataFrame的類(lèi)SQL操作
這篇文章主要介紹了關(guān)于pandas.DataFrame的類(lèi)SQL操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-08-08
python實(shí)現(xiàn)按任意鍵繼續(xù)執(zhí)行程序
本文給大家分享的是如何使用Python腳本實(shí)現(xiàn)按任意鍵繼續(xù)執(zhí)行程序的代碼,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下2016-12-12
解決同一目錄下python import報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了解決同一目錄下python import報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
python?(pyqt)?表格顯示圖片的實(shí)現(xiàn)方式
這篇文章主要介紹了python?(pyqt)?表格顯示圖片的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Python爬蟲(chóng)包BeautifulSoup學(xué)習(xí)實(shí)例(五)
這篇文章主要為大家詳細(xì)介紹了Python爬蟲(chóng)包BeautifulSoup的學(xué)習(xí)實(shí)例,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2018-06-06
python處理json文件的四個(gè)常用函數(shù)
這篇文章主要介紹了python處理json文件的四個(gè)常用函數(shù),主要包括json.load()和json.dump()及json.loads()還有json.dumps(),需要的朋友可以參考一下2022-07-07
詳解Python中數(shù)據(jù)類(lèi)型的轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了Python中數(shù)據(jù)類(lèi)型轉(zhuǎn)換的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下2023-03-03
使用EditPlus編輯器運(yùn)行Python程序方式
這篇文章主要介紹了使用EditPlus編輯器運(yùn)行Python程序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-12-12
詳解Python最長(zhǎng)公共子串和最長(zhǎng)公共子序列的實(shí)現(xiàn)
這篇文章主要介紹了詳解Python最長(zhǎng)公共子串和最長(zhǎng)公共子序列的實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

