我有一个调用许多服务的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
}
);
我的问题是用户只有在执行完成后才能看到日志文件。 有没有办法在实时写入日志时显示日志?
答案 0 :(得分:1)
Python的stdout
是缓冲的,因此在缓冲区已满之前不会写入。要强制立即写入,请在代码中使用sys.stdout.flush()
或f.flush()
。
答案 1 :(得分:0)
我终于找到了我在这里寻找的东西:
http://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent
所以基本上我在后端(Python / Flask)和前端(HTML,jquery)之间创建了一个WebSocket,以确保持续的通信。
使用Python我创建了一个与主线程异步运行的线程,重复获取日志文件的内容并通过ajax将它们发送到Jquery