簡體   English   中英

帶有python cgi的空白瀏覽器屏幕

[英]Empty browser screen with python cgi

我需要在圖形中實時顯示動態數據。 因此,我需要每秒繪制一個具有更新數據的新圖形。

問題是我無法在瀏覽器中清空以前的輸出,因此與其獲得帶有更新數據的簡單圖形,不如獲取大量圖形

這是代碼。 目前它有隨機數據

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()

我將創建一個單獨的CGI腳本來創建圖像。 然后,您可以在image標簽中引用新腳本。 src="makepic.py"

請遵循本指南,以使Python腳本提供動態圖片。 在頁面上,您可以使用JavaScript的settimeout刷新圖像。

您可以考慮在其上帶有HTTP“ Refresh”標頭的頁面。 標頭的內容應為兩個項目,並以分號分隔。 第一個是2(刷新之后的秒數),第二個是頁面的URL(因為您想重復一次)。 如果需要,還可以使用META標記從頁面內容中注入偽標題。

不幸的是,這將意味着您的后端需要進行一些重新組織,因為頁面現在必須在每次調用時都提供計算當前狀態的表示。 這不一定很容易。

要創建一個頁面,服務器可以在該頁面中隨時隨地“推送”新內容,您需要進行一些編程。 考慮提供一個腳本流,將下一個圖形的DIV的InnerHTML屬性設置為HTML,而不是僅提供純HTML。 然后讓您的頁面請求該內容。 這具有進一步的優勢,即每次交付新圖形時,頁面不會完全刷新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM