Отображение содержимого файла журнала по мере его обновления.

У меня есть внешние программы, такие как ffmpeg и gstreamer, работающие в фоновом режиме, и запись в файл журнала. Я хочу отобразить содержимое этого журнала с моим приложением Flask, чтобы пользователь мог наблюдать за обновлением журнала, например, tail -f job.log бы в терминале.

Я попытался использовать <object data="/out.log" type="text/plain"> чтобы указать на файл журнала, но это не отображало данные, или браузер сказал мне, что мне нужен плагин.

  • Отображать данные, передаваемые из флага, при обновлении
  • Исправляемый поток регулярного выражения Python
  • Что такое хороший синтаксический анализатор потока XML для Python?
  • Альтернативы ограничениям памяти Python Popen.communicate ()?
  • Можете ли вы «потопить» изображения в ffmpeg, чтобы создать видео, а не сохранять их на диск?
  • Как читать CSV-файл из потока и обрабатывать каждую строку, когда она написана?
  • Как я могу вставлять и обновлять файл журнала на странице HTML?

  • Как щелкнуть ссылку, которая имеет javascript: __ doPostBack in href?
  • Передача данных Python в JavaScript через Django
  • есть ли словари в javascript, например python?
  • Потрясающее групповое поведение в Highcharts
  • Flask: загрузите файл csv при нажатии кнопки
  • scrape html, сгенерированный javascript с помощью python
  • One Solution collect form web for “Отображение содержимого файла журнала по мере его обновления.”

    Используйте представление «Флажок» для непрерывного чтения из файла навсегда и потока ответа. Используйте JavaScript для чтения из потока и обновления страницы. Этот пример отправляет весь файл, вы можете усечь его в какой-то момент, чтобы сохранить пропускную способность и память. Этот пример спит между чтениями, чтобы уменьшить нагрузку процессора из бесконечного цикла и разрешить другим потокам более активное время.

     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> 

    Это почти то же самое, что и этот ответ , который описывает, как передавать и анализировать сообщения, хотя чтение из внешнего файла навсегда было достаточно новым, чтобы быть его собственным ответом. Код здесь проще, потому что мы не заботимся о разборе сообщений или прекращении потока, просто навсегда сохраняя файл.

    Python - лучший язык программирования в мире.