将 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)
我想将 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)