ファイルから永久に読み込み、応答をストリームするには、[フラスコ]ビューを使用します。 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>
永遠に外部ファイルからの読み込みがそれ自身の答えであるのに十分な小説だったが、これは、メッセージをストリーミングし、解析する方法について説明している、ほとんどthis answerと同じです。ここでのコードは、メッセージを解析したり、ストリームを終了したりすることなく、ファイルを永遠に追跡することができるので、簡単です。
を使用しようとしましたが、フラスコはHTMLページを読み込めず、その領域内の別のページの内容を表示します(/ Syslogではなく)。 –
htmlページを単独で開くと(フラスコではなく)「このコンテンツを表示するにはプラグインが必要です」 –
+