2014-09-10 40 views
2

使用'adb pull ...'时,无论成功如何,都会将输出发送到stderr。这有什么理由吗?举一个例子,拉动的文件是存在的,拉一个文件,该文件不存在:为什么adb push/pull将STDOUT重定向到STDERR?

当我运行:

adb pull /data/data/good_file.txt /tmp` 

我得到如下:

stdout: 
stderr: 0 KB/s (13 bytes in 0.078s) 

(即无标准输出)

然后,当,当我运行:

adb pull /data/data/bad_file.txt /tmp 

我得到如下:

stdout: 
stderr: remote object '/data/bad_file.txt' does not exist 

下面是用来产生上述结果的程序:

from subprocess import Popen 
cmd = "adb pull /data/data/good_file.txt /tmp" 
p = Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
out, err = p.communicate() 
print cmd 
print "stdout: " + out 
print "stderr: " + err 
+0

我实际上看到像'adb'这样简单的东西也打印到STDERR – pho79 2014-09-11 00:26:29

+1

在短期内,如果您想分页输出,例如,您可以设置一个别名,如adp ='adb 2 >&1',所以像少的命令将按预期工作 – pho79 2014-09-11 00:44:07

回答

-1

我有同样的问题有:adb install -r /foo/bar.apk和听起来像adb总是派他的结果到stderr ,最后加上2>&1即可解决问题。

cmd = "adb pull /data/data/good_file.txt /tmp 2>&1" 

的2> & 1只是重定向通道2(标准误差)和通道1 (标准输出)到相同的地方,在这种情况下是信道1 (标准输出),并从那里你的日志文件。

+0

我可以知道downvote的原因吗? – Equiman 2017-08-11 15:27:32

相关问题