在更新日志文件时显示其内容

我有诸如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>

这几乎与该答案相同,后者描述了如何流式传输和解析消息,尽管永远从外部文件中读取数据已经足够新颖,可以说是它自己的答案。这里的代码更简单,因为我们不在乎解析消息或结束流,而只是永久拖尾文件。

以上是 在更新日志文件时显示其内容 的全部内容, 来源链接: utcz.com/qa/417895.html

回到顶部