首页 >后端开发 >Python教程 >如何在 Python 中同时将子进程输出写入终端和文件?

如何在 Python 中同时将子进程输出写入终端和文件?

Barbara Streisand
Barbara Streisand原创
2024-11-03 22:58:30846浏览

How Can I Write Subprocess Output to Both the Terminal and Files Simultaneously in Python?

使用 Python 的子进程同时将进程输出写入终端和文件

当使用 subprocess.call() 执行多个可执行文件时,最好有输出显示在终端和指定文件中。但是,默认行为仅允许输出重定向到文件或终端。

要克服此限制,请考虑直接将 Popen 与 stdout=PIPE 参数结合使用。这将使您能够从 Popen 对象的 stdout 属性读取输出。

要实现所需的行为,请执行以下步骤:

  • 创建一个 tee()函数: 此函数生成一个线程,将输入从一个文件转发到多个输出文件。
  • 实现 teed_call() 函数: 此函数模拟 subprocess.call() 但接受额外的 stdout 和 stderr 文件参数。它使用 tee() 将输出写入文件和终端。

以下是如何使用这些函数的示例:

<code class="python">import sys
from subprocess import Popen, PIPE
from threading import Thread

def tee(infile, *files):
    ...

def teed_call(cmd_args, **kwargs):
    ...

outf, errf = open("out.txt", "wb"), open("err.txt", "wb")
assert not teed_call(["cat", __file__], stdout=None, stderr=errf)
assert not teed_call(["echo", "abc"], stdout=outf, stderr=errf, bufsize=0)
assert teed_call(["gcc", "a b"], close_fds=True, stdout=outf, stderr=errf)</code>

此代码有效地将输出写入两个文件每个执行的命令同时显示文件和终端。

以上是如何在 Python 中同时将子进程输出写入终端和文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn