Python3 实现 USB 连接状态自动识别与重连检测

Ivy
Ivy
发布时间:2026-10-13| 6人浏览过
原创

本文介绍在Python3自动化测试中,如何利用ADB命令实时监测USB设备的连接状态。通过对比设备列表变化,实现开测前多设备同时识别等待,以及测试过程中USB意外断开后的自动重连检测与重试逻辑,确保测试流程的稳定性。

USB连接状态检测的应用场景

在进行自动化测试时,经常会遇到需要判断USB设备是否已成功连接的场景。需要注意的是,本文讨论的方法仅适用于通过ADB命令控制手机的情况。

第一种场景出现在测试启动阶段,特别是当需要同时测试多台设备时。为了确保测试能够同步进行,必须等待所有设备的USB连接被系统完全识别。虽然可以打开另一个终端窗口不断执行adb devices命令来手动检测,但这显然不够智能化且效率低下。

第二种场景发生在测试执行过程中。有时USB连接会意外自动断开,如果此时不检测USB是否重新连接,测试脚本仍会继续向下执行,这必然导致测试失败。因此,识别重连状态至关重要。

多设备同时识别的实现逻辑

针对第一种场景,核心思路是利用adb devices命令持续获取当前已连接设备的ID列表。

具体步骤如下:首先获取初始的设备列表devlist,并计算当前已连接的设备数量。

接着,利用while循环不断重新获取设备列表。当新获取的设备数量大于之前的数量时,遍历新设备列表,检查新设备是否不在旧设备列表中。如果是,则打印该设备ID,从而实现对USB连接的实时识别与打印输出。

具体代码实现如下所示:

多设备识别代码示例


import os
from time import sleep
 
# 获取设备id列表
def getdevlist():
  devlist = []
  connectfile = os.popen('adb devices')
  list = connectfile.readlines()
  # print(list)
  for i in range(len(list)):
    if list[i].find('\tdevice') != -1:
      temp = list[i].split('\t')
      devlist.append(temp[0])
  return devlist
 
 
connectdevice = input('请输入每次要同时连接的设备数:')
number = int(connectdevice.strip())
 
while True:
  lists = getdevlist()
  devnum = len(lists)
  id = 1
  tempdevlist = getdevlist()
  if devnum < number:
    print(f'\n设备未全部识别,应识别{number}台设备!\n当前已识别{devnum}台设备,请连接设备并等待识别:\n\n')
    for i in range(devnum):
      print(f'设备{id}: {lists[i]}')
      id = id + 1
  # 等待识别所有设备
  while devnum < number:
    lists = getdevlist()
    curnum = len(lists)
    if curnum > devnum:
      for i in range(len(lists)):
        if lists[i] not in tempdevlist:
          print(f'设备{id}: {lists[i]}')
          id = id + 1
          tempdevlist = getdevlist()
      devnum = curnum
    
  print(f'\n所有设备已全部识别!当前有连接{len(getdevlist())}台设备.\n\n')

测试中USB重连的检测与处理

第二种场景的前提是已知当前已连接设备的deviceid。这一信息通常不难获取,其处理思路与第一种情况类似,但我将其封装为一个独立的函数。在实际应用中,偶尔会出现概率性的USB断开后又自动连接的情况,若不处理会导致测试失败。因此,预先掌握这些概率性故障点,并在适当位置加入重连判断逻辑,既能保证代码简洁,又能提高测试的鲁棒性。

重连检测函数示例


import os
from time import sleep
 
def reconnectAction(deviceid):
  devlist = getdevlist()
  print(f'设备{deviceid}正在尝试重连.')
  id = 1
  while deviceid not in devlist:
    print(f'第{id}次 ', end = ' ')
    devtuple = getdevlist()
    id = id + 1
  print(f'\n设备{deviceid}重新建立连接成功.')
  sleep(1)
 
 
# example:
if __name__ == '__main__':
  deviceid = '12lk34fkjaaf'
  if clickScreen(openfilemanager, deviceid) != 0:
    print(f'{openfilemanager[1]}:执行失败‘)
    reconnectAction(deviceid)
    clickScreen(openfilemanager, deviceid)

至此,功能实现完毕。

以上关于Python3自动识别USB连接状态及重连判断的方法就是全部内容,希望能对读者有所帮助,也欢迎大家多多支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。