我正在创建一个python脚本来处理一些快速启动命令,我正在尝试执行
fastboot getvar product
为了看看我选择了什么产品。问题是当我运行这个代码时:
p = subprocess.Popen(['fastboot', "getvar", "all"])
out, err = p.communicate()
print "We got: " + out
Out为空。如果我传入设备而不是getvar-all,效果会很好。
我认为这与这个堆栈溢出问题有关,但我很难将其翻译成python:
从批处理文件快速启动getvar
如何将getvar的输出返回到字符串中,而不仅仅是输出到终端?
编辑:
我找到了一个github帐户,他为adb制作了一个类似的功能,并对其进行了修改以实现我想要的:
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方法。所以我的新问题是一样的,但我如何对子流程做到这一点?
对于fastboot getvar all
,您需要捕获stderr
而不是stdout
:
print subprocess.check_output(['fastboot', 'getvar', 'all'], stderr=subprocess.STDOUT)