1

我正在创建一个 python 脚本来处理一些快速启动命令,我正在尝试做

fastboot getvar product

为了看看我选择了什么产品。问题是当我运行此代码时:

p = subprocess.Popen(['fastboot', "getvar", "all"])
out, err = p.communicate()
print "We got: " + out

出来是空的。如果我传入设备而不是 getvar all,它工作正常。

我认为这与这个堆栈溢出问题有关,但我很难将它翻译成 python:

从批处理文件中快速启动 getvar

如何将 getvar 的输出以字符串形式返回,而不是仅输出到终端?

编辑:

我找到了一个为 adb 做了类似功能的人的 github 帐户,并对其进行了修改以实现我想要的:

def callFastboot(self, command):
    command_result = ''
    command_text = 'fastboot %s' % command
    results = os.popen(command_text, "r")
    while 1:
        line = results.readline()
        if not line: break
        command_result += line
    return command_result

out = test.callFastboot("getvar product 2>&1")
print "We got: " + out

问题是它使用了旧的 os.popen 方法。所以我的新问题是一样的,但我如何用子流程做到这一点?

4

1 回答 1

1

因为fastboot getvar all您需要捕获stderr而不是stdout

print subprocess.check_output(['fastboot', 'getvar', 'all'], stderr=subprocess.STDOUT)
于 2013-07-19T19:48:42.943 回答