如何在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后面需要把整个命令串作为一个参数传递。有两种写法:
- 用单引号包裹整个命令,内部的双引号直接使用:
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}"')
- 用双引号包裹整个命令,内部的双引号用反斜杠转义:
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
相关产品推荐
相关产品推荐

