首页 > 解决方案 > 在终端和变量之间拆分标准输出

问题描述

考虑以下函数

import time

def foo():
    for i in range(5):
        print(f"{i}. Hello world!")
        time.sleep(1)

我想将所有这些打印调用保存在一个变量中,而不会阻止它们实时到达终端。本质上,print会输出到标准输出和一个变量。

我努力了:

from contextlib import redirect_stdout
import io

stdout = io.StringIO()
with redirect_stdout(stdout):
    foo()
stdout_content = stdout.getvalue()
print(stdout_content)

但是,这会阻止打印到终端,直到foo返回。我想foo在对象存储调用时实时打印到终端。

如何做到这一点?

标签: python-3.x

解决方案


一种方法是向redirect_stdout 提供您自己的文件,如对象。您的对象类将write通过写入文件和原始sys.stdout.

你可以在sys.stdout 这里阅读。您可以在此处
查看各种文件,例如类,以获得可靠的示例。


推荐阅读