【问题标题】:python : redirect output to text file and display it in real timepython:将输出重定向到文本文件并实时显示
【发布时间】:2015-06-27 14:25:07
【问题描述】:

我有一个调用许多服务的 python 函数,并在日志文件中打印调用的服务的结果。这是我的代码:

def coordinator():
   f = file(path,'a')
   sys.stdout = f
   /* do a lot of stuff */
   f.close()
   with open(path) as log:
        logs = log.read()
        return jsonify(log = logs)

函数的结果返回给一个jQuery getJSON函数,该函数在网页中显示最终的日志文件:

$.getJSON('/../coordinator',
  {//parameters},
  function(data) {
    //display data.log
  }
);

我的问题是用户只有在执行完成后才能看到日志文件。 有没有办法实时显示日志??

【问题讨论】:

  • coordinator 可以在后台启动操作并立即返回日志文件的某种标识符。可以编写另一种方法来读取文件。还有许多其他选项,包括使用 zeromq 之类的高级中间件来启动操作并提供发布者来跟踪操作的进展情况。

标签: jquery python real-time logfile


【解决方案1】:

Python 的 stdout 是缓冲的,所以在缓冲区满之前它不会写入。要强制立即写入,请在您的代码中使用sys.stdout.flush()f.flush()

【讨论】:

  • 我已经这样做了,但我不知道如何在 f.flush() 之后获取文件
  • Python 的stdout 缓冲取决于它是否附加到pty。 OP 将stdout 替换为打开的文件及其打开的文件,而不是缓冲的原始stdout。也就是说,OP 应该把冲洗放在哪里?
  • 我把刷新放在协调器函数调用的服务中,但之后我不知道如何重复获取文件
【解决方案2】:

我终于在这里找到了我想要的东西:

http://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent

所以基本上我在后端(Python/Flask)和前端(HTML、jquery)之间创建了一个 WebSocket,以确保持续通信。

我使用 Python 创建了一个与主线程异步运行的线程,重复获取日志文件的内容并通过 ajax 将它们发送到 Jquery

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-29
    • 2013-04-21
    • 2016-06-26
    • 2010-10-22
    • 2017-04-22
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多