为什么将shell输出发送到stderr?

时间:2019-04-14 20:51:15

标签: python subprocess pipe stdout stderr

我正在使用python中的subprocess模块,每当我调用必须运行子进程的任何方法时,在这种情况下,外壳上的某些bash代码都会输出(例如,使用命令< em> iwconfig )重定向到 stderr

该命令的输出是否应该重定向到 stdout 而不是 stderr ?就像我说过的,这种情况发生在.Popen().check_output()之类的任何方法上。 这个问题似乎很重复,但是我在论坛上找不到其他任何答案来解释为什么会这样。

stderr参数设置为subprocess.STDOUT,因此我可以从命令中获取输出。否则,没有其他方法。无论如何, stderr 是输出错误的根源,对吗?这对我来说没有意义...

s = subprocess.check_output("iwconfig", shell=True, universal_newlines=True, stderr=subprocess.STDOUT)

谢谢。

1 个答案:

答案 0 :(得分:0)

正如@JohnAnderson所说,发生这种情况是因为,如果我的系统上没有配置无线设备,即使输出看起来很正常,来自iwconfig的输出也将被视为错误消息。 我还从subprocess中找到了另一种称为run()的新方法,并且发生了同样的事情,因此肯定是Unix / Linux行为。

s = subprocess.run('iwconfig', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

s.stderr #Produces output