如何在QtScrcpy连接安卓设备时用Python发送ADB命令
实现Python向多台安卓设备发送ADB按键命令(配合QtScrcpy投屏场景)
核心思路
QtScrcpy基于ADB实现设备通信,只要设备能被ADB识别,就能通过Python调用ADB命令向指定设备发送按键指令。核心是针对多台设备指定对应设备ID,避免命令发送混乱。
步骤实现
确认ADB环境就绪
- 确保Windows系统已配置ADB环境变量,或在Python脚本中指定ADB绝对路径(如
C:\platform-tools\adb.exe)。 - 打开命令行执行
adb devices,能列出所有已连接的安卓设备(含QtScrcpy连接的设备),则ADB识别正常。
- 确保Windows系统已配置ADB环境变量,或在Python脚本中指定ADB绝对路径(如
Python脚本实现多设备指令发送
使用subprocess模块执行ADB命令,先获取所有设备ID,再遍历发送指定按键命令:import subprocess import re def get_adb_devices(): # 执行adb devices并解析设备ID result = subprocess.run(['adb', 'devices'], capture_output=True, text=True) device_pattern = re.compile(r'^([\w\d:.]+)\s+device$', re.MULTILINE) return device_pattern.findall(result.stdout) def send_keyevent_to_device(device_id, keyevent=24): # 向指定设备发送按键指令 cmd = ['adb', '-s', device_id, 'shell', 'input', 'keyevent', str(keyevent)] try: subprocess.run(cmd, check=True, capture_output=True, text=True) print(f"设备 {device_id} 按键指令发送成功") except subprocess.CalledProcessError as e: print(f"设备 {device_id} 指令发送失败: {e.stderr}") if __name__ == "__main__": connected_devices = get_adb_devices() if not connected_devices: print("未检测到已连接的安卓设备") else: print(f"检测到 {len(connected_devices)} 台设备,开始发送指令...") for device in connected_devices: send_keyevent_to_device(device)与QtScrcpy的配合说明
- QtScrcpy连接设备时会自动通过ADB建立通信,只要QtScrcpy能正常投屏控制,脚本就能识别对应设备ID。
- 若只需给特定设备发指令,可在
connected_devices列表中筛选目标设备ID,无需遍历所有设备。
注意事项
- 设备连接状态变化(如断开重连)时,需重新运行脚本或添加定时检测设备状态的逻辑。
- 部分设备需开启「USB调试」「允许模拟按键」权限,确保ADB能正常执行输入命令。
内容的提问来源于stack exchange,提问作者tomash
相关产品推荐
相关产品推荐

