You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:39:04