Flask实现日志自动更新时yield输出无法用\b清空的解决方案
问题描述
我有一个从日志文件读取内容实现自动更新的Flask页面,代码如下:
@app.route('/console-refresh') def refresh(): global previouscontent previouscontent = "" def generate_response(): global previouscontent with open("logfile", "r") as f: while True: f.seek(0) content = f.read() if content.find(previouscontent) != 0: yield "\b" * len(previouscontent) previouscontent = "" yield content[len(previouscontent):] previouscontent = content sleep(1) return app.response_class(generate_response(), mimetype="text/plain")
代码中yield "\b" * len(previouscontent)的作用是清空已输出内容,在print场景下可正常生效,但在Flask页面中使用时出现异常显示。请问\b的HTML等效实现是什么?或者有没有其他方法可以清空yield输出的内容?
解决方案
class RefreshHandler: def __init__(self): self.previous_content = "" def generate_response(self): while True: with open("logfile", "r") as f: content = f.read() if content.find(self.previous_content) != 0: yield '<meta http-equiv = "refresh" content = "0">' return yield content[len(self.previous_content):] self.previous_content = content sleep(1) @app.route('/console-refresh') def refresh(): return app.response_class(RefreshHandler().generate_response(), mimetype="text/html")
RefreshHandler().generate_response()是添加yield逻辑的位置,每次执行yield string都会将对应字符串追加到输出内容中。如果需要从头开始输出,使用以下代码块即可触发客户端页面刷新并结束当前流:
yield '<meta http-equiv = "refresh" content = "0">' return
遗留问题
如何在不使用JavaScript的前提下将该功能集成到其他HTML页面中?
内容的提问来源于stack exchange,提问作者Elevator9253
相关产品推荐
相关产品推荐

