【问题标题】:Starting adb daemon python启动 adb 守护进程 python
【发布时间】:2017-06-22 14:43:21
【问题描述】:

我正在为python开发一个ADB客户端,我打算用子进程调用adb二进制来获取信息。

这是我尝试调用它以启动 adb 服务器的方式。

check_output([ 'adb.exe','start-server'],stderr=STDOUT)

我确实看到 adb 正在运行,但之后程序就卡住了。 我试过shell=True,但这并不影响它。

当我从任务管理器中杀死 adb 时,程序会退出,并打印正确的输出。

我该如何解决这个问题,我假设由于守护程序正在运行,该命令不会退出?

我能够通过在单独的线程中启动命令来克服这个问题,并将当前线程与其他 adb 命令一起使用,因为它们会立即返回。 有没有更优雅的解决方案?

【问题讨论】:

    标签: python multithreading subprocess adb


    【解决方案1】:

    您可以通过 subprocess.Popen 做到这一点。

    import subprocess
    
    adb = subprocess.Popen(['adb.exe', 'start-server'])
    # Do some other stuff while adb is running...
    
    adb.terminate()  # Kill the process once you're done
    

    这也有一些优点,比如可以通过标准输入向进程提供输入,使用Popen.communicate()

    【讨论】: