防止子进程的子进程写入标准输出

问题描述:

我打电话给一个子进程并希望禁用任何输出到我的shell。我试图用做到这一点:防止子进程的子进程写入标准输出

with tempfile.TemporaryFile() as tempf: 
     proc = Popen(cmd, stdout=tempf, stderr=tempf) 
     proc.communicate() 

但仍有出现在终端输出的一些(但少于正常)。问题可能是被调用的进程使用了​​os.execvp?任何建议,以完全禁用所有子过程的输出?

注意

重定向到devnull是禁止输出的一个更好的办法:

with open(os.devnull, 'w') as tempf: 
    proc = Popen(cmd, stdout=tempf, stderr=tempf) 
    proc.communicate() 

回答过的问题!

非常简单的解决方案:被调用的进程使用CORBA,服务器实际上是打印出来的。

+0

你的例子使用''popen()'',而不是''subprocess'' – Carpetsmoker 2012-02-05 22:46:07

+0

subprocess默认情况下会继承父类的stdout和stderr。在寻找wild ttys之后,sububprocess无法获得你的标准输入。你正在执行哪些程序? – phihag 2012-02-05 22:46:43

+1

@Carpetsmoker:Popen生活在更新的Python版本的模块子进程中 – 2012-02-05 22:47:16

如上所述,被调用进程正在调用一个服务器,该服务器产生了mysterios stdout。