用python 进行雷电接口检测

雷电接口检测工具说明文档

功能概述

这个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()

生成完整的雷电接口支持状态报告,包括:

  • 主机雷电支持情况
  • 主机雷电版本信息
  • 已连接设备列表
  • 使用注意事项

使用方法

  1. 直接运行脚本:
python thunderbolt_check.py
  1. 作为模块导入:
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 580/120 Gbps预计2024年底推出
    Thunderbolt 440 Gbps要求更严格的认证
    Thunderbolt 340 Gbps最广泛使用的版本
    Thunderbolt 220 Gbps较老的版本
    Thunderbolt 110 Gbps最早的版本

技术实现细节

  1. 使用subprocess模块执行WMI命令
  2. 通过正则表达式解析设备信息
  3. 支持中英文设备描述识别
  4. 异常处理确保程序稳定运行

可能的错误和解决方案

  1. “获取雷电版本信息时出错”

    • 确保以管理员权限运行
    • 检查WMI服务是否正常运行
  2. “未检测到已连接的雷电设备”

    • 确认设备是否正确连接
    • 检查设备驱动是否正确安装

代码:

import subprocess
import re
from typing import Dict, List, Tupledef 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'] = Trueexcept Exception as e:print(f"检查雷电支持时出错: {e}")return resultdef 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 devicesdef 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_infodef 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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/66566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卷积神经网络 (CNN, Convolutional Neural Network) 算法详解与PyTorch实现

卷积神经网络 (CNN, Convolutional Neural Network) 算法详解与PyTorch实现 目录 卷积神经网络 (CNN, Convolutional Neural Network) 算法详解与PyTorch实现1. 卷积神经网络 (CNN) 算法概述1.1 图像处理1.2 CNN的优势2. CNN的核心技术2.1 卷积层2.2 池化层2.3 全连接层2.4 激活…

《深度学习模型在鸿蒙分布式框架下的跨设备高效之旅》

在人工智能领域,深度学习模型的训练与推理通常需要强大的计算资源和大量的数据支持。而鸿蒙系统的分布式框架为解决这一问题提供了新的思路和方法,使得深度学习模型能够在多个设备之间实现高效的训练与推理。 鸿蒙分布式框架概述 鸿蒙系统是一款面向万…

git的rebase和merge的区别?

B分支从A分支拉出 1.git merge 处于A分支执行,git merge B分支:相当于将commit X、commit Y两次提交,作为了新的commit Z提交到了A分支上。能溯源它真正提交的信息。 2.git rebase 处于B分支,执行git rebase A分支,B分支那边复…

Cadence——virtuous生成的symbol其端口自动添加注释

新换的工艺库,环境变量也会发生变化,毕竟每一家PDK下的.cdsinit 和 .cdsenv文件不尽相同。 这次新换的PDK,搭建完Schcematic之后,再生成的Symbol,发现其pin口,也就是端口没有自动生成注释,我就…

Ruby语言的正则表达式

Ruby语言的正则表达式详解 正则表达式(Regular Expressions,简称Regex)是一种强大的文本处理工具,它可以用来匹配、搜索、替换字符串中的模式。在Ruby语言中,正则表达式的使用非常灵活,并且具有良好的可读…

CClinkIEfield Basic转Modbus TCP网关模块连接三菱FX5U PLC

捷米特JM-CCLKIE-TCP是自主研发的一款CCLINK IE FB从站功能的通讯网关。该产品主要功能是将各种 MODBUS-TCP 设备接入到 CCLINK IE FB网络中。 捷米特JM-CCLKIE-TCP网关连接到CCLINK IE FB总线中做为从站使用,连接到 MODBUS-TCP 总线中做为主站或从站使用。 为了打破…

《分布式光纤测温:解锁楼宇安全的 “高精度密码”》

在楼宇建筑中,因其内部空间庞大,各类电器设施众多,如何以一种既高效又稳定,兼具低成本与高覆盖特性的方式,为那些关键线路节点开展温度监测,是目前在安全监测领域一项重点研究项目,而无锡布里渊…

Docker 专栏 —— Dockerfile 指令详解

文章目录 ADD 复制文件COPY 复制文件ARG 设置构建参数CMD 容器启动命令ENTRYPOINT ⼊⼝点ENV 设置环境变量EXPOSE 声明暴露的端⼝FROM 指定基础镜像LABEL 为镜像添加元数据MAINTAINER 指定维护者的信息RUN 执⾏命令USER 设置⽤户VOLUME 指定挂载点WORKDIR 指定⼯作⽬录 ADD 复制…

开关电源设计中的穿越频率选取

摘要 在开关电源设计之中,穿越频率是一个相当重要的指标。在文中从就开关电源设计中的环路反馈控制方法、环路增益作用进行了阐述。并在此基础上就穿越频率选取的限制条件进行分析,为开关电源设计中的穿越频率选取提供借鉴。 开关电源设计过程中&#x…

探索 INFINI Console:提升 Elasticsearch 管理效率的新利器

1、常见的 Elasticsearch 可视化客户端介绍 1.1 Head 插件 这是一个非常老牌的 Elasticsearch 可视化插件(现在改名了 Multi Elasticsearch Heads),通常以 Chrome 插件或网页形式存在,用来查看集群的节点状态、索引元数据&#x…

黄仁勋CES 2025演讲重点内容

黄仁勋CES 2025演讲重点内容 硬件产品发布 GeForce RTX 50系列GPU: 架构与性能提升:正式发布的新一代GeForce RTX 50系列GPU采用英伟达旗舰的Blackwell架构,这是自25年前引入可编程着色技术以来计算机图形领域最重大的创新。该系列显卡在图形…

《CPython Internals》阅读笔记:p43-p60

《CPython Internals》学习第 3 天,p43-p60 总结,总计 18 页。 一、技术总结 1.编译所需要的package sudo apt install -y build-essential libssl-dev zlib1g-dev libncurses5-dev \ libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev \…

基于视觉惯性 SLAM(VSLAM)、相机和 IMU 数据的融合执行 6 自由度位姿跟踪

案例来源:https://spectacularai.github.io/docs/sdk/wrappers/oak.html 适配相机:带IMU的 OAK-D 系列相机 基于视觉惯性 SLAM(VSLAM)、相机和 IMU 数据的融合执行 6 自由度位姿跟踪 ~~~~~~~(分界线)~~~~~…

【Redis】简介|优点|使用场景|为什么Redis快

目录 一、简介 二、特性(优点) 三、使用场景 一、简介 内存中存储数据的中间件,用于数据库,数据缓存,在分布式系统中能够大展拳脚 中间件:应用程序可以直接从 Redis 中获取数据,而不必频繁地…

UI自动化测试框架playwright--初级入门

一、背景:UI自动化的痛点: 1、设计脚本耗时: 需要思考要如何模拟用户的操作,如何触发页面的事件,还要思考如何设计脚本,定位和操作要交互的元素、路径、位置,再编写代码逻辑,往复循…

安卓cpu调度优化

背景 在性能优化中,app开发者,需要优化app的资源调用,尽量做到用最少的系统资源完成自己的目标。而整机开发者作为系统资源的提供者,在既定的资源索求下,也是尽量提供最少的资源完成app想要的目标,以达到节约系统资源的目的。本文着重整机资源的cpu调度优化。 优化步骤 …

不同方式获取音频时长 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” -------------------------------------------------------------…

数学建模入门——建模流程

摘要:本文介绍了数学建模的一般流程概述。 目录 一、前言 二、数据预处理 三、描述性统计分析 四、模型建立 五、模型评价 一、前言 本文将为想要入门数学建模的同学讲述数学建模的一般流程。但数学建模流程并非一成不变。虽有大致步骤,像分析问题、…

Go语言处理大文件上传和下载

在处理大文件上传和下载时,Go语言提供了一些高效的开发技巧。以下是对这些技巧的详细简述: 大文件上传技巧 文件切片: 为了避免一次性将整个大文件加载到内存中造成内存溢出,可以将大文件切片成多个小的文件片段进行上传。通过将…

人工智能及深度学习的一些题目(三)

1、【填空题】 使用RNNCTC模型进行语音识别,在产生预测输出时,对于输入的音频特征序列通过网络预测产生对应的字母序列,可以使用( beamsearch )算法进行最优路径搜索。 2、【填空题】 逻辑回归模型属于有监督学习中的&…