如何通过Python的os.system执行adb命令为/data/data子文件夹授权
问题解决方法
修正su命令写法,避免cd执行问题
部分su实现对-c参数后的复合命令解析存在兼容问题,直接跳过cd操作,让chmod直接作用于目标路径更稳妥,修改后的Python代码:os.system("adb shell su -c 'chmod -R 777 /data/data'")
无需额外添加exit命令,su -c执行完指定命令后会自动退出root环境。先验证目标路径有效性
手动执行以下命令确认/data/data目录存在:adb shell su -c 'ls -ld /data/data'
如果返回正常的目录信息则路径无误;若提示不存在,说明你的ROM对存储目录做了定制,需要确认实际的应用数据目录位置。解决adb pull权限问题
即使给/data/data设置了777权限,SELinux规则或文件自身权限仍可能限制直接pull操作。可以先把目标文件复制到外部存储再拉取:# 替换成你要拉取的文件实际路径 target_file = "/data/data/com.example.app/files/your_file.txt" os.system(f"adb shell su -c 'cp {target_file} /sdcard/temp_file' && adb pull /sdcard/temp_file ./")推荐使用subprocess替代os.system
os.system无法便捷捕获执行结果和错误信息,用subprocess更可靠,示例代码:import subprocess try: subprocess.run( ["adb", "shell", "su", "-c", "chmod -R 777 /data/data"], check=True, capture_output=True, text=True ) print("权限设置成功") except subprocess.CalledProcessError as e: print(f"执行失败: {e.stderr}")
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

