Python 使用 adb 进行连续的子进程调用

-1 投票
2 回答
1607 浏览
提问于 2025-04-18 17:23

我正在尝试写一个Python脚本,通过adb检查数据库的内容。问题是,在我的代码中,只有第一个subprocess.call()被执行,后面的都被忽略了。因为我对Python还比较陌生,所以不太确定该怎么解决。以下是我的代码:

import subprocess

def root():
    subprocess.call('adb shell',shell=True)
    x=input('Enter package name: ')
    openSql(x)


def openSql(x):
    subprocess.call('cd data/data/%s/databases/'%(x),shell=True)
    table=input('Enter table name: ')
    openTable(table)

def openTable(table):
    subprocess.call('sqlite3 table',shell=True)
    subprocess.call('select * from %s'%(table),shell=True)

root()

运行时没有报错,但它只是在我的模拟器中进入了root模式,其他的什么都没做。

root@android:/ # 

2 个回答

0

这段内容是关于编程问题的讨论,通常在StackOverflow上,程序员们会互相帮助解决各种技术难题。大家会提出问题,然后其他人会给出建议和解决方案。

在这里,可能会涉及到一些代码示例、错误信息或者是如何使用某些工具和技术的说明。对于初学者来说,理解这些内容可能需要一些时间,但只要慢慢来,多动手实践,就能掌握这些知识。

如果你在学习编程,遇到不懂的地方,可以参考这些讨论,看看别人是怎么解决类似问题的。记得多问问题,和其他人交流,这样能更快进步哦!

import subprocess

p=input('Enter package name: ')
d=input('Enter database name: ')
t=input('Enter table name: ')
print subprocess.check_output(["adb", "shell", "sqlite3 /data/data/{}/databases/{}.db 'select * from {};'".format(p, d, t)])
1

你调用了 root 函数 root(),这会让你进入 adb shell(安卓调试桥的命令行界面)。你想在这个 adb shell 中运行一个 python 命令 input,但是这样是行不通的。

这里有几个链接可以帮助你实现想要的功能:

从 shell 运行 Python

SL4A 用户指南

撰写回答