【问题标题】:Python, adb and shell execution query [duplicate]Python,adb和shell执行查询[重复]
【发布时间】:2014-12-22 13:22:23
【问题描述】:

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

我会在 Ruby 中

val = `adb devices`

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

val=system("adb devices")

获取状态码

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

from subprocess import call
call(["adb devices"])

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

【问题讨论】:

  • 没关系。我刚刚做了call(["adb", "devices"]),它奏效了。但是,我仍然想知道如何获得反引号输出
  • Ruby注意:如果使用反引号语法(`adb devices`),可以使用$?.exitstatus获取状态码;不需要system()
  • 谢谢,我从来不知道 :)
  • 在 Python 中是 subprocess.check_output(['adb', 'devices'])(注意:这个命令不运行 shell)。

标签: python adb


【解决方案1】:

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

from subprocess import call
return_code = call(["adb", "devices"])

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

from subprocess import check_output

adb_ouput = check_output(["adb", "devices"])
# stdout of adb in adb_output.

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

from subprocess import check_output, CalledProcessError

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2014-03-16
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多