用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.rhkb.cn/news/504158.html

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

相关文章

闲谭SpringBoot--ShardingSphere分库分表探究

文章目录 1. 背景2. 创建数据库3. 修改yml配置文件4. 分片算法类5. 测试6 小结 1. 背景 接上文,我们对日志表,进行了按月的分表,这样每个月几百万条数据量还是扛得住的。 但是如果数据再多呢,除了提高硬件性能,还有一…

IT面试求职系列主题-Jenkins

想成功求职,必要的IT技能一样不能少,先说说Jenkins的必会知识吧。 1) 什么是Jenkins Jenkins 是一个用 Java 编写的开源持续集成工具。它跟踪版本控制系统,并在发生更改时启动和监视构建系统。 2)Maven、Ant和Jenkins有什么区别…

STM32供电参考设计

STM32供电参考设计 ​ 在图中有VDD,VSS和VDDA,VSSA两种类型的供电引脚,其数据手册解释如下: ​ 令我不解的是:VDDA和VSSA必须分别连接到VDD和VSS,这是什么意思?有大佬能够解答一下吗&#xff1f…

和为0的四元组-蛮力枚举(C语言实现)

目录 一、问题描述 二、蛮力枚举思路 1.初始化: 2.遍历所有可能的四元组: 3.检查和: 4.避免重复: 5.更新计数器: 三、代码实现 四、运行结果 五、 算法复杂度分析 一、问题描述 给定一个整数数组 nums&…

嵌入式系统 (2.嵌入式硬件系统基础)

2.嵌入式硬件系统基础 2.1嵌入式硬件系统的组成 嵌入式硬件系统以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 嵌入式微处理器采用冯诺依曼结构或哈佛结构:前者指令和数据共享同一存储空间…

对快速由表及里说拜拜/如何正确运用由表及里

你是不是还:看到一男子拖走一女子就以为小情侣吵架而已(可能人贩子);看到男友对你好个几次就从此死心塌地(可能有手就行,细节装装而已)结果耽误终身;看到女同事对你微笑不排斥就以为…

(七)人工智能进阶之人脸识别:从刷脸支付到智能安防的奥秘,小白都可以入手的MTCNN+Arcface网络

零、开篇趣谈 还记得第一次用支付宝"刷脸"时的新奇感吗?或者被抖音的人脸特效逗乐的瞬间?这些有趣的应用背后,其实藏着一个精妙的AI世界。今天,就让我们开启一段奇妙的人脸识别技术探索之旅吧! 一、人脸识…

腾讯云AI代码助手编程挑战赛-图片转换工具

作品简介: 解决了人们学习生活中的图片格式转换问题, 制作该脚本,省去了打开在线编辑器操作的时间, 免费为用户提供图片格式的转换的实用小工具 技术架构 python语言的tk库来完成的GUI页面设计, 引用PIL包转换图…

【VUE 指令学习笔记】

v-bind :单向绑定解析表达式,可简写为:xxx v-model :双向数据绑定。 v-for:遍历数组/对象/字符串 v-on:绑定事件监听,可简写为。 v-if:条件渲染(动态控制节点是否存存在) v-else:条件渲染(动态控制节点是否存存在) v-show:条件渲染…

高山旅游景区有效降低成本,无人机山下到山上物资吊运技术详解

在高山旅游景区,传统的物资运输方式往往面临人力成本高昂、效率低下等问题,而无人机技术的引入为这一难题提供了新的解决方案。以下是对无人机从山下到山上进行物资吊运技术的详细解析: 一、无人机物资吊运技术的优势 1. 降低人力成本&#…

【Linux】shell脚本编程

目录 概念: shell脚本的本质: shell脚本编程: shell变量: 变量的定义格式: 变量的分类 自定义变量: 环境变量: 命令变量与命令行参数: 预定义变量: shell中的…

(长期更新)《零基础入门 ArcGIS(ArcScene) 》实验七----城市三维建模与分析(超超超详细!!!)

城市三维建模与分析 三维城市模型已经成为一种非常普遍的地理空间数据资源,成为城市的必需品,对城市能化管理至关重要。语义信息丰富的三维城市模型可以有效实现不同领域数据与IS相信息的高层次集成及互操作,从而在城市规划、环境模拟、应急响应和辅助决策等众多领域公挥作用、…

接口测试-postman(使用postman测试接口笔记)

一、设置全局变量 1. 点击右上角设置按钮-》打开管理环境窗口-》选择”全局“-》设置变量名称,初始值和当前值设置一样的,放host放拼接的url,key放鉴权那一串字符,然后保存-》去使用全局变量,用{{变量名称}}形式 二、…

Django学习笔记之数据库(一)

文章目录 安装一、数据库配置二、基本操作步骤1.增加2.查看3.排序4.更新5.删除数据 三、一对多,多对多,一对一1.一对多1.一对一1.多对多 四、查询操作五、聚合操作六、F和Q操作 安装 首先就是安装Mysql和Navicat。 一、数据库配置 其实整个就是连接前端…

【工具变量】统计行业锦标赛激励数据集(2008-2023年)

一、数据简介 坚持创新驱动发展,要强化企业创新主体地位,发挥企业家在技术创新中的重要作用。作为企业组织内部最具有影响力的角色,高级管理人员拥有企业经营管理的自由裁量权,对企业战略决策及由此产生的经营绩效具有举足轻重的…

DuckDB:PRAGMA语句动态配置数据库行为

PRAGMA语句是DuckDB从SQLite中采用的SQL扩展。PRAGMA命令可能会改变数据库引擎的内部状态,并可能影响引擎的后续执行或行为。本文介绍PRAGMA命令及其典型应用场景。 DuckDB PRAGMA介绍 在 DuckDB 中,PRAGMA 是一种编译指示(compiler directi…

【QT-QTableView实现鼠标悬浮(hover)行高亮显示+并设置表格样式】

1、自定义委托类 HoverDelegate hoverdelegate.h #ifndef HOVERDELEGATE_H #define HOVERDELEGATE_H#include <QObject> #include <QStyledItemDelegate>class hoverdelegate : public QStyledItemDelegate {Q_OBJECT // 添加 Q_OBJECT 宏public:explicit hoverde…

Improving Language Understanding by Generative Pre-Training GPT-1详细讲解

Improving Language Understanding by Generative Pre-Training 2018.06 GPT-1 0.有监督、半监督、无监督 CV&#xff1a;ImageNet pre-trained model NLP&#xff1a;pre-trained model? 在计算机视觉中任务包含分类、检测、分割&#xff0c;任务类别数少&#xff0c;对应…

大数据技术 指令笔记1

3.cd命令 cd命令用来切换工作目录至DirName。其中DirName表示法可为绝对路径或相对路径 例如&#xff1a; cd/ 切换到根目录 cd 切换到家目录 cd /etc/sysconfig/ 切换到/etc/sysconfig目录 cd .. 返回到父目录 4.Is命令 Is命令用来列出文件或…

创建Java项目,并添加MyBatis包和驱动包

一 : Mybatis和jsp使用上,只有Dao层有区别 Mybatis 使用方法: 测试类的7步骤 1.读取核心配置文件 2.构建sql会话工厂 3.开启sql会话 4.获取mapper接口 5.调用相对应的增删改查方法 6.打印 7.关闭回话 /*** 用户列表* throws IOException*/Testpublic void roleList() throws IO…