我对 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 中的反引号获取原始输出
将命令和参数作为列表的单独元素传递:
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)