将 stdout 重定向到 Jinja 变量

Redirect stdout to a Jinja variable

我想将 sys.stdout 重定向到一个 Jinja 变量,以便我可以在前端看到它(我正在使用 Flask 服务器)。我该怎么做呢?有没有更好的方法让标准输出到 HTML 模板?

这是我试过的:

sys.stdout = jinja2.Template("<div id='console'>{{ console }}</div>")

但是我在使用 print 时遇到这个错误:

AttributeError: 'Template' object has no attribute 'write'
Exception ignored in: <Template memory:b4a2a9f0>
AttributeError: 'Template' object has no attribute 'flush'

我看过像 this 这样的帖子,但我不确定如何在我的案例中实施它。感谢任何帮助。

如果我明白你想做什么你应该写类似的东西(然后根据你的需要进行调整):

import sys
from io import StringIO

import jinja2
from flask import Flask

app = Flask(__name__)


@app.route("/test")
def home():
    old_stdout = sys.stdout
    sys.stdout = mystdout = StringIO()
    print("test")
    sys.stdout = old_stdout
    return jinja2.Template("<div id='console'>my output = {{ console }}</div>").render(
        console=mystdout.getvalue()
    )

if __name__ == "__main__":
    app.run("0.0.0.0", 80, True)