2010-05-14 86 views
7

我創建了一個Python腳本,用於監視日誌文件的變化(如tail -f)並將其顯示在控制檯上。我想在web瀏覽器中訪問Python腳本的輸出。我需要什麼來創建這個?我正在考慮使用Django和jQuery。任何提示或例子,不勝感激。在瀏覽器中使用tail -f

回答

8

首先創建一個python腳本來監視日誌文件的變化。如果你只是爲了調試而需要這個測試目的,那麼使用Django或其他Web框架是一個矯枉過正的行爲。使用套接字實現Http Web服務器功能非常簡單。每當一個Http GET請求到來時,只服務於不同請求的差異。爲了達到這個目的,你需要在內存中存儲每個請求的狀態(例如文件中最後一行的數量)。

jQuery部分其實很簡單。用setTimeout函數設置一個定時器。像這樣的事情可以做到:

function doUpdate() { 
    $.ajax({type: "GET", url : tailServiceUrl, 
      success: function (data) { 
      if (data.length > 4) 
      { 
       // Data are assumed to be in HTML format 
       // Return something like <p/> in case of no updates 
       $("#logOutputDiv").append(data); 
      } 
      setTimeout("doUpdate()", 2000); 
      }}); 
} 

setTimeout("doUpdate()", 2000); 

您還可以創建回調錯誤和超時報告服務器的問題。

+0

要澄清一點,setTimeout()函數只會在2000毫秒後調用一次doUpdate()。它不會創建一個循環。如果你想循環,你需要將setTimeout調用移到doUpdate()函數中,很可能在最後,或將其更改爲setInterval()。下面是兩個JS函數的一個很好的比較:http://javascript.about.com/library/blstvsi.htm – gurun8 2010-05-15 04:32:03

+0

你是對的,setTimeout必須移入doUpdate。 – kgiannakakis 2010-05-15 08:11:08

2

我沒有任何Python或Django的經驗,但我假設你可以在Python中製作system call,如tail,並轉發細節。

從那裏,我會使用一個jQuery .ajax()調用一個JavaScript setInterval()循環到您的Python腳本,並將結果輸出到網頁上的div。總的來說一個非常簡單的解

在這種情況下,你真的不會需要使用一個開放的tail -f系統調用,因爲JS setInterval()方法的性質,Python腳本將被調用一遍又一遍,直到JS clearInterval()方法被調用。您將根據您要執行工作的位置將腳本細節彙總爲Python或JS。我會建議Python,因爲您可以在指尖上使用更強大的功能,並且您可以通過AJAX調用發送更少的數據。理論上,前端jQuery代碼中可能不需要太多的邏輯。只顯示數據。

0

爲什麼你不將數據輸出到一個HTML文件?你可以運行一個cron作業來運行你的腳本,然後再創建一個可以從瀏覽器訪問的HTML文件。

+0

我的腳本已經可以輸出HTML,但我不想'刷新'每X秒完成一次頁面。 – compie 2010-05-14 19:36:50