我創建了一個Python腳本,用於監視日誌文件的變化(如tail -f)並將其顯示在控制檯上。我想在web瀏覽器中訪問Python腳本的輸出。我需要什麼來創建這個?我正在考慮使用Django和jQuery。任何提示或例子,不勝感激。在瀏覽器中使用tail -f
回答
首先創建一個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);
您還可以創建回調錯誤和超時報告服務器的問題。
我沒有任何Python或Django的經驗,但我假設你可以在Python中製作system call,如tail
,並轉發細節。
從那裏,我會使用一個jQuery .ajax()
調用一個JavaScript setInterval()
循環到您的Python腳本,並將結果輸出到網頁上的div。總的來說一個非常簡單的解
在這種情況下,你真的不會需要使用一個開放的tail -f
系統調用,因爲JS setInterval()
方法的性質,Python腳本將被調用一遍又一遍,直到JS clearInterval()
方法被調用。您將根據您要執行工作的位置將腳本細節彙總爲Python或JS。我會建議Python,因爲您可以在指尖上使用更強大的功能,並且您可以通過AJAX調用發送更少的數據。理論上,前端jQuery代碼中可能不需要太多的邏輯。只顯示數據。
爲什麼你不將數據輸出到一個HTML文件?你可以運行一個cron作業來運行你的腳本,然後再創建一個可以從瀏覽器訪問的HTML文件。
我的腳本已經可以輸出HTML,但我不想'刷新'每X秒完成一次頁面。 – compie 2010-05-14 19:36:50
- 1. tail -f使用PuTTY掛起
- 2. 在C++中實現「tail -f」
- 3. 在Perl中模擬tail -f
- 4. Tail -f + grep?
- 5. 「tail -f」會使磁盤滿?
- 6. Java「tail -f」包裝
- 7. Combine tail -F和json
- 8. tail -F log.log | grep ResponseTime |切-d = -f 2
- 9. 如何在Java中使用遠程Unix系統「tail -f」文件?
- 10. 「tail -f filename」的Web實現?
- 11. 相當於tail -f for ls?
- 12. 'tail -f'數據庫表
- 13. 如何在瀏覽器中使用網頁瀏覽器控件?
- 14. linux命令「tail -f filename」不起作用
- 15. 理解「在蟒蛇的tail -f」
- 16. 如何使用瀏覽器控件在圖像中查找文本+ F
- 17. 僅在瀏覽器中使用xpages
- 18. 如何在瀏覽器中使用require
- 19. 在jQuery中使用瀏覽器歷史
- 20. 在Jasmine和瀏覽器中使用btoa
- 21. 在Visual Basic中使用IE瀏覽器
- 22. 硒WebDriverJS使用在瀏覽器中
- 23. 在瀏覽器中使用OpenType字體
- 24. 在瀏覽器中使用Q庫
- 25. 使用Java在瀏覽器中書寫
- 26. 在瀏覽器中使用FileAPI庫
- 27. 如何在瀏覽器中使用backgroundworker?
- 28. HTML 5使用在桌面瀏覽器和手機瀏覽器
- 29. 在JAWS運行時,瀏覽器的Ctrl + f不起作用
- 30. 如何在Safari瀏覽器中覆蓋ctrl-f
要澄清一點,setTimeout()函數只會在2000毫秒後調用一次doUpdate()。它不會創建一個循環。如果你想循環,你需要將setTimeout調用移到doUpdate()函數中,很可能在最後,或將其更改爲setInterval()。下面是兩個JS函數的一個很好的比較:http://javascript.about.com/library/blstvsi.htm – gurun8 2010-05-15 04:32:03
你是對的,setTimeout必須移入doUpdate。 – kgiannakakis 2010-05-15 08:11:08