用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, Tuple

def 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'] = True
            
    except Exception as e:
        print(f"检查雷电支持时出错: {e}")
    
    return result

def 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 devices

def 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_info

def 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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学生公寓技术规格书如何编写?

学生公寓限电柜的技术规格书主要包括以下内容‌: ‌用电计量计费‌:限电柜可以通过计算机售电管理系统进行用电计量计费,学生需要预交电费,系统会自动将数据传给控电柜和配电箱,对宿舍的电量进行累减计量‌。 ‌时间控…

【HarmonyOS NEXT】鸿蒙应用点9图的处理(draw9patch)

【HarmonyOS NEXT】鸿蒙应用点9图的处理(draw9patch) 一、前言: 首先在鸿蒙中是不支持安卓 .9图的图片直接使用。只有类似拉伸的处理方案,鸿蒙提供的Image组件有与点九图相同功能的API设置。 可以通过设置resizable属性来设置R…

SpringBoot 使用 Cache 集成 Redis做缓存保姆教程

1. 项目背景 Spring Cache是Spring框架提供的一个缓存抽象层,它简化了缓存的使用和管理。Spring Cache默认使用服务器内存,并无法控制缓存时长,查找缓存中的数据比较麻烦。 因此Spring Cache支持将缓存数据集成到各种缓存中间件中。本文已常…

MySQL事件功能简介

MySQL 的事件调度器(Event Scheduler)提供了一种便捷的方法来定时执行 SQL 语句,从而实现数据维护、报告生成等自动化操作。本文将详细介绍 MySQL 的事件功能,并说明如何使用 Navicat 管理这些事件。 1. 什么是 MySQL 事件调度器…

高光谱相机的特点

光谱特性 高光谱分辨率:能将光谱范围分割成极窄的波段,光谱分辨率通常达到纳米级甚至亚纳米级,可精确捕捉到不同物质在细微光谱差异上的特征,比如可以区分不同种类的植被因叶绿素含量等差异而在光谱上的细微变化。 多波段探测&a…

备考蓝桥杯:数据结构概念浅谈

目录 1数据结构的概念 什么是数据结构: 为什么要有数据结构 2.数据结构的三个组成要素 1.逻辑结构 2.存储结构 3.数据运算 3。算法好坏的度量(时间复杂度和空间复杂度) 时间复杂度计算 最优和平均和最差时间复杂度 计算时间复杂度例子 空间复…

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

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

基于伪分布式模式部署Hadoop集群

1.上传Hadoop安装包 在/export/software目录下使用rz命令上传Hadoop安装包 2.创建目录 在/export/servers目录下创建wfb-hadoop目录,用于存放Hadoop的安装目录,命令如下: mkdir -p /export/servers/wfb-hadoop 3.安装Hadoop 1)将Hadoop安…

Android车载音频系统目录

目录 第一章 1.1 Android Automotive(一) 1.2 Android Automotive(二) 1.3 Android Automotive(三) 第二章 2.1 Android车载音频系统概览 2.2 车载音频焦点 2.3 车载音频配置 2.4 Audio control HAL…

怎么管理电脑usb接口,分享四种USB端口管理方法

怎么管理电脑usb接口,分享四种USB端口管理方法 USB接口作为电脑重要的外部接口,方便了数据传输和设备连接。 然而,不加管理的USB接口也可能带来安全隐患,例如数据泄露、病毒传播等。 因此,有效管理电脑USB接口至关重…

React+redux项目搭建流程

1.创建项目 create-react-app my-project --template typescript // 创建项目并使用typescript2.去除掉没用的文件夹,只保留部分有用的文件 3.项目配置: 配置项目的icon 配置项目的标题 配置项目的别名等(craco.config.ts&…

conda+jupyter+pycharm:如何在Windows conda环境下运行jupyter并使用浏览器或者pycharm运行.ipynb

1 安装conda 2 conda环境下安装jupyter pip install jupyter3 设置jupyter配置文件 1)创建 jupyter_notebook_config.py文件 jupyter notebook --generate-config 2)设置密码 3)设置参数 直接将以下参数修改为自己的配置后复制到配置文件…

微信小程序获取图片使用session(上篇)

概述&#xff1a; 我们开发微信小程序&#xff0c;从后台获取图片现实的时候&#xff0c;通常采用http get的方式&#xff0c;例如以下代码 <image class"user_logo" src"{{logoUrl}}"></image>变量logoUrl为ur图片l的请求地址 但是对于很多…

【江协STM32】9-1/2/3 USART串口协议、USART外设、串口发送串口发送+接收

1. 通信接口 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发全双工&#xff1a;指通信双方能够同时进行双向通信。发送线路和接收线路互不影响&#xff0c…

第一 二章 小车硬件介绍-(全网最详细)基于STM32智能小车-蓝牙遥控、避障、循迹、跟随、PID速度控制、视觉循迹、openmv与STM32通信、openmv图像处理、smt32f103c8t6

第一篇-STM32智能小车硬件介绍 后续章节也放这里 持续更新中&#xff0c;视频发布在小B站 里面。这边也会更新。 B站视频合集: STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随 小B站链接:https://www.bilib…

【网络】电路交换(Circuit Switching)、报文交换(Message Switching)和分组交换(Packet Switching)

电路交换&#xff08;Circuit Switching&#xff09;&#xff1a;一条专用的通信线路&#xff08;或电路&#xff09;&#xff08; 电话专用线路&#xff0c;好处&#xff1a;专用稳定&#xff0c;有没有数据都被占用&#xff0c;坏处&#xff1a;容易浪费&#xff09; 报文交换…

Pixel 6a手机提示无法连接移动网络,打电话失败!

1、开启VoLTE 2、如果没有&#xff0c;下载shizuku和PixelIMS应用。 shizuke Releases RikkaApps/Shizuku GitHub PixellMS Release v1.2.8 kyujin-cho/pixel-volte-patch GitHub 3、安装shizuke启动&#xff0c;开通root可以直接点击下面的启动&#xff0c;如果没有就…

游戏关卡设计的常用模式

游戏关卡分为很多种&#xff0c;但常用的有固定套路&#xff0c;分为若干种类型。 关卡是主角与怪物、敌方战斗的场所&#xff0c;包括装饰物、通道。 单人游戏的关卡较小&#xff0c;偏线性&#xff1b; 联机/MMO的关卡较大&#xff0c;通道多&#xff0c;自由度高&#xf…

DC/AC并网逆变器模型与仿真MATLAB

DC/AC并网逆变器是一种将直流电&#xff08;DC&#xff09;转化为交流电&#xff08;AC&#xff09;&#xff0c;并将其与电网并联的设备。它的核心功能是实现直流电源&#xff08;如光伏电池板或储能电池&#xff09;与电网的有效连接&#xff0c;同时保证输出电能质量满足电网…

作业:IO:day2

题目一 第一步&#xff1a;创建一个 struct Student 类型的数组 arr[3],初始化该数组中3个学生的属性 第二步&#xff1a;编写一个叫做save的函数&#xff0c;功能为 将数组arr中的3个学生的所有信息&#xff0c;保存到文件中去&#xff0c;使用fread实现fwrite 第三步&#xf…