【发布时间】:2019-09-04 21:20:15
【问题描述】:
我正在使用 python 中的subprocess 模块,每当我调用子进程必须运行的任何方法时,在这种情况下,shell 上的一些 bash 代码,输出(假设来自命令,例如 iwconfig) 被重定向到 stderr。
不应该将该命令的输出重定向到 stdout 而不是 stderr?正如我所说,这发生在像.Popen() 和.check_output() 这样的任何方法上。
这个问题可能看起来是重复的,但我在论坛上找不到任何其他答案来解释为什么会发生这种情况。
stderr 参数设置为subprocess.STDOUT,因此我可以获取命令的输出。否则没有其他办法。无论如何,stderr 是输出错误所在,对吧?这对我来说没有意义......
s = subprocess.check_output("iwconfig", shell=True, universal_newlines=True, stderr=subprocess.STDOUT)
提前致谢。
【问题讨论】:
-
iwconfig的一些输出将转到stderr。例如,如果您没有无线设备,那么iwconfig的所有输出都是错误消息,并发送到stderr。 -
我不确定我明白你在问什么。谁在做你所说的这种“重定向”?您只是在谈论 subprocess 模块对 stderr 和 stdout 的作用吗?这真的不是重定向。这就是我感到困惑的原因。
-
一般来说,linux(和 Mac)命令行二进制文件会定期将结果发送到 stdout,并将错误消息发送到 stderr。例如,“ls /foo/bar”将列出路径 /foo/bar 到 stdout 如果它引用现有对象,并且如果它不存在将向 stderr 发送错误消息。如果您使用“shell=True”通过子进程模块的函数之一运行此命令,您将看到这些相同的结果分别映射到其 stdout 和 stderr 参数。 - 我知道其中没有任何奇怪的重定向行为。
-
如果这只是
iwconfig的奇怪行为的问题,那么听起来@JohnAnderson 已经涵盖了你。 -
我仍然不明白这个“将输出重定向到标准错误的标准 linux/unix 行为”是关于什么的。我在上面问过,希望有人能给我解释一下。如果有的话,我的经验恰恰相反……stderr 经常被重定向到 stdout。我们在谈论什么“重定向”? - 这与 Python 和
subprocess模块有什么关系?
标签: python subprocess pipe stdout stderr