我正在为python开发一个ADB客户端,我打算用子进程调用adb二进制文件来获取信息。
以下是我尝试调用它的方法,以启动adb服务器。
check_output([ 'adb.exe','start-server'],stderr=STDOUT)
我确实看到adb正在运行,但程序在此之后就被卡住了。
我尝试过使用shell=True
,但这并没有影响它。
当我从任务管理器中删除adb时,程序会退出,并输出正确的输出。
我如何解决这个问题,我认为自守护程序运行以来该命令没有退出?
我能够通过在单独的线程中启动命令,并将当前线程与其他adb命令一起使用来克服此问题,因为它们会立即返回。 有更优雅的解决方案吗?
答案 0 :(得分:0)
您可以使用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
这也有一些优点,比如通过stdin为进程提供输入的可能性,使用Popen.communicate()