2010-10-19 41 views
2

我有一個Python命令行腳本,它可能需要一些時間才能運行(從5秒到5分鐘),具體取決於它所做的檢查。該腳本使用許多命令行參數,其中一些是強制的,大多數是可選的。帶有「流式文本」的Python腳本的Web界面

我想將此腳本「網絡化」,從而可以從Web瀏覽器訪問它,但無需更改核心Python腳本,因此通過從其他內容啓動它(例如另一個Python腳本)

我已經在Apache中使用過mod_python,因此構建一個Python腳本並生成帶有窗體和提交按鈕的網頁並從中運行我的核心Python腳本並不是太多問題。

問題出在核心python腳本的輸出上。我不想等到它完成後纔將其輸出顯示在DIV(或FRAME)中。只要它生成一行,我希望該行顯示在Web界面上,這是DIV中的一種文本流。

我知道如何從包含在HTML頁面中的Javascript或作爲外部Javascript文件執行此操作,但不能從其他程序的輸出執行此操作。

任何想法,我可以如何實現這一目標?我寧願保留所有Python + Apache,但如果真的需要其他東西(PHP,AJAX,Javascript ......),我可以忍受它。


作爲建議通過以下 whatnick,我試圖核心python腳本的輸出重定向到一個臨時文件,然後使用 AJAX Logfile Trailer & Viewer代碼,我在網上找到顯示此文件。

它的工作方式,但仍然有一些緩衝,因爲線出現在幾行塊的「日誌尾頁」,而不是行的行。這很可能是由於AJAX腳本使用計時器重新加載日誌文件,每X毫秒(在腳本中可配置,用於Javascript定時器)。即使我降低了速度,但對於我的核心腳本來說,速度還是不夠快,因爲它有時會輸出很多行。

回答

1

您可以將冗長腳本的輸出記錄到文件中,並使用基於JavaScript計時器的代碼定期地拉取,解析和顯示日誌內容。如果拉動整個日誌過多,您也可以委託一個更小/更快的服務器端Python腳本來解析日誌,並將日誌的尾部傳遞給調用JavaScript。這是如何顯示嵌入式設備中的路由器日誌等。

祝你好運。這裏是一個關於Javascript Timers的小教程。

+0

感謝您的想法。我在問題中添加了我的測試結果。 – Snark 2010-10-20 11:43:06

0

對於IE和Firefox,如果您傳輸響應,它將在提供完整頁面之前開始渲染。因此,您可以在HTML文件中間傳輸日誌。一旦該過程完成,您將正常渲染頁面的其餘部分。

你將不得不經過一些卷積才能得到一個普通的Python模板引擎來處理這個問題,因爲它們傾向於一舉成功。

Chrome似乎不太喜歡這個(我期望這是一個webkit的東西,所以你也可以從這個技巧中折扣Safari),我不知道關於Opera。