You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python subprocess执行adb devices无输出?单独执行正常

解决Python脚本执行adb devices无输出的问题

核心原因

执行adb tcpip 5555后,设备需要完成从USB连接模式到TCP/IP模式的切换,这个过程需要几秒时间。如果立即执行adb devices,adb服务还未完成设备状态的更新,因此无法检测到设备,导致无输出。

解决方案

1. 添加等待时间

在两个adb命令之间加入等待,给设备足够的切换时间:

import subprocess
import time

with open('shell_output.txt', 'w') as file_:
    # 执行tcpip切换命令
    subprocess.run('adb tcpip 5555', shell=True, stdout=file_, stderr=subprocess.STDOUT)
    # 等待3-5秒,让设备完成模式切换
    time.sleep(3)
    # 执行设备列表查询
    subprocess.run('adb devices', shell=True, stdout=file_, stderr=subprocess.STDOUT)

2. 检查命令执行状态

捕获adb tcpip 5555的返回码,确认命令是否执行成功,避免因前置命令失败导致后续无输出:

tcpip_result = subprocess.run('adb tcpip 5555', shell=True, stdout=file_, stderr=subprocess.STDOUT)
if tcpip_result.returncode != 0:
    print("切换TCP/IP模式失败,请检查设备连接")

3. 指定adb绝对路径(可选)

如果subprocess无法通过环境变量找到adb,直接使用adb的完整路径:

# Windows示例
subprocess.run(r'C:\platform-tools\adb.exe tcpip 5555', shell=True, stdout=file_)
# Linux/macOS示例
subprocess.run('/usr/bin/adb tcpip 5555', shell=True, stdout=file_)

4. 强制重启adb服务(可选)

如果等待后仍无输出,可以尝试重启adb服务,强制重新扫描设备:

subprocess.run('adb kill-server', shell=True)
subprocess.run('adb start-server', shell=True)
subprocess.run('adb devices', shell=True, stdout=file_)

额外说明

  • 使用with语句管理文件,无需手动调用close(),避免文件未正确关闭导致输出丢失。
  • 添加stderr=subprocess.STDOUT可以将错误信息写入文件,方便排查命令执行失败的原因。

内容的提问来源于stack exchange,提问作者Smit Prajapati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:25:58