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

如何在Python中通过os.system/os.popen执行adb shell多命令?

解决Python中通过os.system/os.popen执行adb shell多命令的问题

我明白你现在的需求——在Python里用os.system或os.popen实现bash里那条adb shell命令的功能,而且尽量不想引入额外库对吧?没问题,我来给你拆解一下怎么处理。

首先得纠正一个小细节:你原来的bash命令里cd [path] rm -r [app name]其实有个小隐患,cd和rm之间没有连接符,这样不管cd是否成功(比如路径不存在),rm都会执行,很容易误删文件。建议改成cd [path] && rm -r [app name],这样只有当cd到目标路径成功后,才会执行删除操作,更安全。另外exit是多余的,adb shell执行完指定命令后会自动退出,不用手动加。

接下来看具体实现:

用os.system实现

你需要注意Python字符串的引号转义问题,因为adb shell后面需要把整个命令串作为一个参数传递。有两种写法:

  1. 用单引号包裹整个命令,内部的双引号直接使用:
import os

# 替换成你的实际路径和应用名称
target_path = "/sdcard/your/target/path"
app_name = "com.your.app.name"

os.system(f'adb shell "cd {target_path} && rm -r {app_name}"')
  1. 用双引号包裹整个命令,内部的双引号用反斜杠转义:
import os

target_path = "/sdcard/your/target/path"
app_name = "com.your.app.name"

os.system(f"adb shell \"cd {target_path} && rm -r {app_name}\"")

用os.popen实现

如果你需要获取命令执行的输出结果(比如查看是否有错误提示),用os.popen更合适,写法和os.system类似:

import os

target_path = "/sdcard/your/target/path"
app_name = "com.your.app.name"

# 执行命令并读取输出
output = os.popen(f'adb shell "cd {target_path} && rm -r {app_name}"').read()
# 打印输出结果
print(output)

处理含空格或特殊字符的路径/应用名

如果你的路径或应用名称里包含空格、特殊字符,需要再用单引号把它们包裹起来,避免解析错误:

import os

target_path = "/sdcard/my app files"
app_name = "my test app"

cmd = f'adb shell "cd \'{target_path}\' && rm -r \'{app_name}\'"'
os.system(cmd)

备选方案(万不得已时)

如果你尝试上述方法还是遇到问题,再考虑使用adb-shell库,安装后可以更优雅地执行adb命令,但这是你说的“别无他法”时的选择:

from adb_shell.adb_device import AdbDeviceTcp

device = AdbDeviceTcp('192.168.1.100', 5555)  # 替换成你的设备IP和端口
device.connect()
device.shell(f'cd {target_path} && rm -r {app_name}')
device.close()

内容的提问来源于stack exchange,提问作者Ondřej Baše

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:47:57