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

Python 防止子进程的子进程写入标准输出,python,subprocess,stdout,Python,Subprocess,Stdout,我正在调用一个子进程,希望禁用shell的任何输出。我正试图通过以下方式做到这一点: with tempfile.TemporaryFile() as tempf: proc = Popen(cmd, stdout=tempf, stderr=tempf) proc.communicate() 但终端仍有一些输出(但低于正常值)。问题可能是被调用的进程使用了os.execvp?有没有建议完全禁用所有子流程的输出 注意 重定向到devnull是禁用输出的更好方法

我正在调用一个子进程,希望禁用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,而服务器实际上正在打印。

如上所述,被调用的进程正在调用一个服务器,该服务器生成Mystios标准输出。

如上所述,被调用的进程正在调用一个服务器,该服务器生成Mystios标准输出。

您的示例使用的是
popen()
,默认情况下,非
子进程
子进程从其父进程继承stdout和stderr。除了继续寻找野生TTY,子进程不可能获得你的stdin。您正在执行哪些程序?@rubesmoker:Popen位于较新python中的模块子进程中versions@Carpetsmoker不,注意大写的
P
。他刚刚从子流程import Popen执行了
os.popen
无论如何不接受任何关键字参数,因此会立即失败。旁注:将stderr和stdout发送到临时文件不是放弃输出的好方法。只需打开
os.devnull
进行编写。您的示例使用的是
popen()
,而不是
子进程
默认情况下从父进程继承stdout和stderr。除了继续寻找野生TTY,子进程不可能获得你的stdin。您正在执行哪些程序?@rubesmoker:Popen位于较新python中的模块子进程中versions@Carpetsmoker不,注意大写的
P
。他刚刚从子流程import Popen执行了
os.popen
无论如何不接受任何关键字参数,因此会立即失败。旁注:将stderr和stdout发送到临时文件不是放弃输出的好方法。只需打开
os.devnull
进行编写。