Python 为什么shell输出转到stderr?

Python 为什么shell输出转到stderr?,python,subprocess,pipe,stdout,stderr,Python,Subprocess,Pipe,Stdout,Stderr,我正在使用python中的子流程模块,每当我调用子流程必须运行的任何方法时(在本例中是shell上的一些bash代码),输出(比如来自命令iwconfig)就会重定向到stderr 该命令的输出不应该重定向到stdout而不是stderr?正如我所说的,这在任何方法上都会发生,比如.Popen()和。 这个问题似乎是重复的,但我在论坛上找不到任何其他的答案来解释为什么会发生这种情况 stderr参数被设置为subprocess.STDOUT,因此我可以从命令中获取输出。否则就没有别的办法了。在任

我正在使用python中的
子流程
模块,每当我调用子流程必须运行的任何方法时(在本例中是shell上的一些bash代码),输出(比如来自命令iwconfig)就会重定向到stderr

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

stderr
参数被设置为
subprocess.STDOUT
,因此我可以从命令中获取输出。否则就没有别的办法了。在任何情况下,stderr都是输出错误所在,对吗?这对我来说没有意义

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

提前感谢。

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

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

s.stderr #Produces output

来自
iwconfig
的一些输出将转到
stderr
。例如,如果您没有无线设备,则所有的
iwconfig
输出都是一条错误消息,并发送到
stderr
。我不确定是否收到了您的要求。谁在做你所说的“重定向”?您是在谈论子流程模块如何处理stderr和stdout吗?那不是真的。这就是我感到困惑的原因。通常,linux(和Mac)命令行二进制文件会将常规结果发送到stdout,并将错误消息发送到stderr。例如,“ls/foo/bar”将列出指向stdout的路径/foo/bar(如果它引用现有对象),如果它不存在,将向stderr发送错误消息。如果您使用“shell=True”通过子流程模块的函数之一运行此命令,您将看到这些相同的结果分别映射到其stdout和stderr参数。-我不知道这其中有什么奇怪的重定向行为。如果这只是
iwconfig
的奇怪行为问题,那么听起来好像@JohnAnderson已经介绍过了。我仍然不明白“将输出重定向到stderr的标准linux/unix行为”是关于什么的。我在上面问过,希望有人能给我解释一下。如果有什么不同的话,我的经验正好相反……stderr经常被重定向到stdout。我们在说什么“重定向”这与Python和
子流程
模块有什么关系?