我有一些代码,这是一个标准的将输出发送到标准输出的命令。
params = [toolsDir + "\\adb.exe", "shell", "pm", "path", app]
p = Popen(params, shell=False, stdout=subprocess.PIPE)
stdout, stderr = p.communicate()
if "package:" in stdout:
package = stdout[8:].rstrip()
第3行返回一个字符串,在第5行成功执行并且没有错误后,我可以在'package'上进行split和rstrip()操作。
stdout, stderr = p.communicate()
然而...如果我从第3行中删除'stderr',那么它将变成
stdout = p.communicate()
我遇到了错误:
package = stdout[8:].rstrip()
AttributeError: 'tuple' object has no attribute 'rstrip'
有人能解释一下为什么会发生这种情况吗?在第2行Popen中,stderr甚至没有定义为管道,为什么它会返回一个没有stderr的元组,但是却返回带有stderr的字符串?
我已经解决了这个问题,尽管花了我好几十分钟的时间,现在想知道为什么它很重要。谢谢。