为何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
相关产品推荐
相关产品推荐

