Python、adb 和 shell 执行查询

Sri*_*ini 1 python adb

我对 Python 不太熟悉,但我对 Ruby 很熟悉。所以我将为我想要实现的目标提供类似物

在 Ruby 中,我会

val = `adb devices`
Run Code Online (Sandbox Code Playgroud)

获取存储在 val 中的 adb 设备的“原始输出”,以及

val=system("adb devices")
Run Code Online (Sandbox Code Playgroud)

获取状态码

我想在 Python 中执行相同的任务。我在看

from subprocess import call
call(["adb devices"])
Run Code Online (Sandbox Code Playgroud)

但这失败了,我不想使用 os.system 因为我想获得一些正确的错误处理。我如何使调用工作以及如何从 Python 中的反引号获取原始输出

mha*_*wke 5

将命令和参数作为列表的单独元素传递:

from subprocess import call
return_code = call(["adb", "devices"])
Run Code Online (Sandbox Code Playgroud)

但是,这会将输出发送到 stdout 并且您无法捕获它。相反,您可以使用subprocess.check_ouput()

from subprocess import check_output

adb_ouput = check_output(["adb", "devices"])
# stdout of adb in adb_output.
Run Code Online (Sandbox Code Playgroud)

如果返回代码非零,则会引发异常。您应该捕获它以查看返回码是什么。返回码 0 不会引发异常:

from subprocess import check_output, CalledProcessError

try:
    adb_ouput = check_output(["adb", "devices"])
except CalledProcessError as e:
    print e.returncode
Run Code Online (Sandbox Code Playgroud)