使用python进行雷电接口检测

 更新时间:2025年01月09日 09:07:11   作者:老大白菜  
这篇文章主要为大家详细介绍了如何使用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()

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

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

使用方法

直接运行脚本:

python thunderbolt_check.py

作为模块导入:

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最早的版本

技术实现细节

使用subprocess模块执行WMI命令

通过正则表达式解析设备信息

支持中英文设备描述识别

异常处理确保程序稳定运行

可能的错误和解决方案

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

确保以管理员权限运行

检查WMI服务是否正常运行

“未检测到已连接的雷电设备”

确认设备是否正确连接

检查设备驱动是否正确安装

完整代码

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

到此这篇关于使用python进行雷电接口检测的文章就介绍到这了,更多相关python雷电接口检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 对于Python的Django框架使用的一些实用建议

    对于Python的Django框架使用的一些实用建议

    这篇文章主要介绍了对于Python的Django框架使用的一些实用建议,包括一些优秀模块的介绍,要的朋友可以参考下
    2015-04-04
  • Python设置默认编码为utf8的方法

    Python设置默认编码为utf8的方法

    这篇文章主要介绍了Python设置默认编码为utf8的方法,结合实例形式分析了Python针对文件编码的设置方法与相关注意事项,需要的朋友可以参考下
    2016-07-07
  • python获取淘宝服务器时间的代码示例

    python获取淘宝服务器时间的代码示例

    这篇文章主要介绍了python获取淘宝服务器时间的代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • pyhton中__pycache__文件夹的产生与作用详解

    pyhton中__pycache__文件夹的产生与作用详解

    这篇文章主要介绍了pyhton中__pycache__文件夹的产生与作用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • python 添加环境变量及配置方法

    python 添加环境变量及配置方法

    这篇文章主要介绍了python 添加环境变量的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Python网络爬虫神器PyQuery的基本使用教程

    Python网络爬虫神器PyQuery的基本使用教程

    这篇文章主要给大家介绍了关于Python网络爬虫神器PyQuery的基本使用教程,文中通过示例代码介绍的非常详细,对大家学习使用PyQuery具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • Python中的闭包与装饰器的用法详解

    Python中的闭包与装饰器的用法详解

    这篇文章主要介绍了Python中的闭包与装饰器的用法详解,装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象,需要的朋友可以参考下
    2023-07-07
  • Python图像处理库PIL详细使用说明

    Python图像处理库PIL详细使用说明

    Pillow是Python中较为基础的图像处理库,主要用于图像的基本处理,比如裁剪图像、调整图像大小和图像颜色处理等,需要的朋友可以参考下
    2022-04-04
  • python中进程间通信及设置状态量控制另一个进程

    python中进程间通信及设置状态量控制另一个进程

    这篇文章主要介绍了python中进程间通信及设置状态量控制另一个进程,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • python实现斐波那契数列的方法示例

    python实现斐波那契数列的方法示例

    每个码农大概都会用自己擅长的语言写出一个斐波那契数列出来,斐波那契数列简单地说,起始两项为0和1,此后的项分别为它的前两项之后。下面这篇文章就给大家详细介绍了python实现斐波那契数列的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2017-01-01

最新评论