Python 防止子进程的子进程写入标准输出
我正在调用一个子进程,希望禁用shell的任何输出。我正试图通过以下方式做到这一点: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是禁用输出的更好方法
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
进行编写。