我正在使用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)
谢谢。
答案 0 :(得分:0)
正如@JohnAnderson所说,发生这种情况是因为,如果我的系统上没有配置无线设备,即使输出看起来很正常,来自iwconfig
的输出也将被视为错误消息。
我还从subprocess中找到了另一种称为run()的新方法,并且发生了同样的事情,因此肯定是Unix / Linux行为。
s = subprocess.run('iwconfig', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
s.stderr #Produces output