[英]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.