具有 python 子进程.Popen行为总是更改为打印标准?



根据此处的解决方案和python手册,以下代码片段不得在屏幕上打印任何内容,包括cmd的stderr。

p = subprocess.Popen(cmd, cwd=tmpdir, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
o, e = p.communicate()

但不知何故,我在终端上收到了cmd的错误消息。行为是否发生了变化?我尝试了以下变体,它也具有相同的结果:

p = subprocess.Popen(cmd, cwd=tmpdir, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
o, e = p.communicate()

我在 CentOs 7 上有 Python 2.7.5。

不,它没有改变。你的假设是错误的。确保您运行的是正确的代码段,或者尝试找出可能写入终端的其他内容。因为使用stderr=subprocess.STDOUT运行子进程会将所有stderr 输出重定向到 stdout。

最新更新