python : 重定向输出到文本文件并实时显示

python : redirect output to text file and display it in real time

我有一个 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
  }
);

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

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

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

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

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

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