防止子进程的子进程写入标准输出
问题描述:
我打电话给一个子进程并希望禁用任何输出到我的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,服务器实际上是打印出来的。
答
如上所述,被调用进程正在调用一个服务器,该服务器产生了mysterios stdout。
你的例子使用''popen()'',而不是''subprocess'' – Carpetsmoker 2012-02-05 22:46:07
subprocess默认情况下会继承父类的stdout和stderr。在寻找wild ttys之后,sububprocess无法获得你的标准输入。你正在执行哪些程序? – phihag 2012-02-05 22:46:43
@Carpetsmoker:Popen生活在更新的Python版本的模块子进程中 – 2012-02-05 22:47:16