防止子进程的子进程向stdout写入

2 投票
1 回答
2382 浏览
提问于 2025-04-17 12:23

我在调用一个子进程时,想要关闭所有输出到我的命令行。我尝试用:

 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,服务器实际上是在打印输出。

1 个回答

-2

如上所述,被调用的程序正在连接一个服务器,这个服务器产生了神秘的标准输出(stdout)。

撰写回答