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 =]
我有一个 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 =]