我有一個Python腳本,每秒輸出一次或兩次,但需要很長時間才能完成。我想設置一個網站,以便有人可以直接調用腳本,並在腳本運行時將輸出發送到屏幕。如何在網站上顯示實時python腳本輸出?
我不希望用戶等到腳本完全結束,因爲那時所有輸出都會一次顯示。我也試過了,連接總是超時。
我不知道這個過程被稱爲什麼,我在找什麼術語以及我需要什麼。 CGI?阿賈克斯?這裏需要一些認真的指導,謝謝!
如果很重要,我打算使用Nginx作爲網絡服務器。
我有一個Python腳本,每秒輸出一次或兩次,但需要很長時間才能完成。我想設置一個網站,以便有人可以直接調用腳本,並在腳本運行時將輸出發送到屏幕。如何在網站上顯示實時python腳本輸出?
我不希望用戶等到腳本完全結束,因爲那時所有輸出都會一次顯示。我也試過了,連接總是超時。
我不知道這個過程被稱爲什麼,我在找什麼術語以及我需要什麼。 CGI?阿賈克斯?這裏需要一些認真的指導,謝謝!
如果很重要,我打算使用Nginx作爲網絡服務器。
的解決方案是刷新在選擇點輸出緩衝器在腳本的執行 - 我永遠只能在PHP通過沖洗(這樣做),但這個貌似the Python equivalent:
cgiprint()也刷新輸出 緩衝區使用sys.stdout.flush()。大多數 服務器將緩衝腳本 的輸出,直到它完成。對於長時間運行的 腳本,8個緩衝輸出可能會阻止您的用戶,他們會懷疑 發生了什麼。您可以定期清空緩衝區,或者使用 以非緩衝模式運行 Python。執行此操作的 命令行選項是-u, ,您可以在您的shebang行中將其指定爲
#!/usr/bin/python -u
。
nginx的不支持CGI,所以你需要使用的FastCGI或WSGI
另外,您可以通過使用nginx類似webpy和代理它
首先的 - 你的腳本必須輸出標頭:
連接:保持活動
因爲瀏覽器必須知道它將不得不等待。
而您的腳本必須輸出數據而不緩衝。並且stackoverflow有already answered this question。
從http://tools.cherrypy.org/wiki/Comet 「維基百科介紹彗星作爲‘新詞來描述Web應用程序模型,其中一個長期持有的HTTP請求允許web服務器將數據推到瀏覽器,而無需顯式地請求它的瀏覽器。’換句話說,彗星就是您需要構建真正花哨的AJAX應用程序的異步Javascript mojo。
以下代碼演示瞭如何使用CherryPy和jQuery編寫Comet應用程序,它是一個到控制檯ping命令的Web界面。這個例子選擇了ping命令,因爲如果沒有參數,它將無限期地運行。當涉及到web應用程序編程時,執行永不結束的命令通常是一個很大的禁忌,但是使用CherryPy我們可以處理t他很容易:「看到LINK
我正在嘗試做同樣的事情。到目前爲止,我正在使用cherrypy,因爲它很容易與我的腳本集成。
正如其他人所暗示的那樣,您可以使用保持活動連接,而不是使用「return」語句,而是使用yield語句而不是「print」語句也使用yield語句。這將基本顯示python腳本中發生的所有事情到網頁上。
經過廣泛的搜索和測試後,我建議nginx作爲反向代理,將gevent &瓶作爲後端,因爲nginx不會提供有史以來的python源文件。