我有外部程序(例如 ffmpeg 和 gstreamer)在后台运行并写入日志文件。我想用我的 Flask 应用程序显示此日志的内容,以便用户可以观看日志更新,例如tail -f job.log
会在终端做。
我尝试使用<object data="/out.log" type="text/plain">
指向日志文件,但未能显示数据,或者浏览器告诉我我需要一个插件。
如何在 HTML 页面中嵌入和更新日志文件?
使用 Flask 视图持续从文件中读取数据并流式传输响应。使用 JavaScript 从流中读取并更新页面。此示例发送整个文件,您可能希望在某个时刻截断该文件以节省带宽和内存。此示例在读取之间休眠,以减少无限循环中的 CPU 负载,并允许其他线程有更多的活动时间。
from time import sleep
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/stream')
def stream():
def generate():
with open('job.log') as f:
while True:
yield f.read()
sleep(1)
return app.response_class(generate(), mimetype='text/plain')
app.run()
<pre id="output"></pre>
<script>
var output = document.getElementById('output');
var xhr = new XMLHttpRequest();
xhr.open('GET', '{{ url_for('stream') }}');
xhr.send();
setInterval(function() {
output.textContent = xhr.responseText;
}, 1000);
</script>
这几乎与这个答案,它描述了如何流式传输和解析消息,尽管永远从外部文件读取足够新颖,足以成为它自己的答案。这里的代码更简单,因为我们不关心解析消息或结束流,只是永远跟踪文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)