【问题标题】:Empty browser screen with python cgi带有python cgi的空浏览器屏幕
【发布时间】:2011-12-15 15:05:45
【问题描述】:

我需要在图表中实时显示动态数据。 所以我需要用每秒更新的数据绘制一个新图表。

问题是我无法清空浏览器中的先前输出 所以不是用更新的数据得到一个简单的图表 我得到了很多图表

这里是代码。目前它有随机数据

def graph(data):
    X,Y = 500, 275 #image width and height
    img = Image.new("RGB", (X,Y), "#FFFFFF")
    draw = ImageDraw.Draw(img)

    #draw some axes and markers
    for i in range(X/10):
        draw.line((i*10+30, Y-15, i*10+30, 20), fill="#DDD")
        if i % 5 == 0:
            draw.text((i*10+15, Y-15), `i*10`, fill="#000")
    for j in range(1,Y/10-2):
        draw.text((0,Y-15-j*10), `j*10`, fill="#000")
    draw.line((20,Y-19,X,Y-19), fill="#000")
    draw.line((19,20,19,Y-18), fill="#000")

    for i in range(1,len(data)):
        draw.line((i+20,Y-20,i+20,Y-20-data[i]), fill="#000")

    rtime = str(time.time())
    img.save("../images/out.png"+rtime, "PNG")

    htmlBody = []
    htmlBody.insert(0, 'Content-type: text/html; charset=UTF-8\n') 
    htmlBody.append('<html>')    
    htmlBody.append('<body>')    
    htmlBody.append('<img src=\"../images/out.png'+rtime+'\" alt=\"\" />')

    htmlBody.append("</body>")
    htmlBody.append('</html>')  
    sys.stdout.flush()
    sys.stdout.write('\n'.join(htmlBody))
    sys.stdout.flush()





data = []
if (printgraph!=None):
    sys.stdout = sys.stderr = oldsysout
    for i in range(1,5):
        data.append(int(250*(random.random())))
        graph(data)
        sys.stdout.flush()
        time.sleep(1)
    exit()

【问题讨论】:

    标签: python cgi real-time flush


    【解决方案1】:

    我将创建一个单独的 CGI 脚本来创建图像。然后,您可以在图像标记中引用新脚本。 src="makepic.py".

    关注this guide,让 Python 脚本提供动态图像。在页面上,可以使用 JavaScript 的settimeout 来刷新图片。

    【讨论】:

      【解决方案2】:

      您可以考虑一个带有 HTTP“刷新”标头的页面。标头的内容应该是用分号分隔的两个项目。第一个是 2(刷新后的秒数),第二个是页面的 URL(因为您希望内容重复)。如果需要,您还可以使用 META 标记从页面内容中注入伪标题。

      不幸的是,这意味着您的后端需要重新组织,因为页面现在必须在每次调用时提供当前计算状态的表示。这并不容易。

      要创建一个服务器可以随时“推送”新内容的页面,您需要进行一些编程。考虑交付将 DIV 的 InnerHTML 属性设置为下一个图形的 HTML 的脚本流,而不仅仅是交付纯 HTML。然后让您的页面请求此内容。这样做的另一个好处是每次交付新图形时都不会完全刷新页面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-13
        • 2016-12-24
        • 1970-01-01
        • 2021-12-22
        • 2017-04-05
        • 2013-02-17
        • 2010-10-24
        相关资源
        最近更新 更多