2011-12-15 59 views
0

我需要實時顯示圖形中的動態數據。 因此,我需要每秒鐘繪製一張更新數據的新圖。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() 

回答

0

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

跟隨this guide使Python腳本爲動態圖像提供服務。在頁面上,您可以使用JavaScript的settimeout刷新圖像。

0

您可以考慮使用HTTP「刷新」標題的頁面。標題的內容應該是用分號分隔的兩個項目。第一個是2(刷新秒數),第二個是頁面的URL(因爲你想要重複的內容)。如果您願意,也可以使用META標記從頁面內容中插入一個僞標題。

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

要創建一個服務器可以隨時「推」新內容的頁面,您需要進行一些編程。考慮爲下一個圖形提供一個將DIV的InnerHTML屬性設置爲HTML的腳本流,而不僅僅是提供純HTML。然後讓你的頁面請求這個內容。這還有一個好處,即每次傳遞新圖形時頁面都不會完全刷新。