运行 ADB Shell,然后在 Python 中与控制台应用程序交互

Sha*_*boz 3 python android python-3.x

我遇到一种情况,我需要运行命令来adb shell获取设备的根访问权限。

然后,我使用以下命令在我的设备上运行交互式控制台应用程序:/oem/console --no-logging

该命令返回以下输出:

  • 控制台进程:连接到应用程序...
  • 控制台进程:连接到应用程序...

之后,我需要按 ENTER 以便控制台接受事件(箭头光标已准备好接受调用事件)。这个控制台应用程序接受某些事件,我可以模拟我的设备的行为。例如:

  1. invoke put.device.into.charge 1
  2. invoke call.cell.hangup 1
  3. invoke xyz

所以我的问题是,如何将这些命令逐一输入到此控制台应用程序中,并在每个命令后等待几秒钟?

这是我到目前为止的代码:

def run_adb_shell_command(command, return_process=False):
    """Run an ADB shell command."""
    cmd = command.split()
    process = Popen(cmd, stdin=subprocess.PIPE)
    if return_process:
        return process



def send_command_to_console_app(command, process):
    """SEND Commands to Console App."""
    new_line = '\n'.encode()
    # encoded_command = str(command).encode()
    s0 = command
    s1 = 'event 1'
    s2 = 'event 2'
    s3 = 'event 3'
    concat_query = "{}\n".format(s0)

    process.communicate(input=concat_query.encode('utf-8'))[0]
    process.kill()
Run Code Online (Sandbox Code Playgroud)

问题是,当communicate()为其中一个事件调用函数时,它只是挂起并且永远不会完成,以便我可以运行下一个事件。

对此最好的方法是什么?

Sha*_*boz 5

因此,经过几天的研究,我从这篇文章中找到了解决方案/sf/answers/3923588931/。我必须使用异步子进程将不同的命令链接在一起。