2014-01-22 84 views
4

我需要編寫一個簡單的腳本,它將實時顯示/proc/net/xt_recent/PORTSCAN的內容。該文件不斷變化,我想在無限循環中讀取它,並儘可能準確地顯示「瞬時」狀態。我的文件的樣本內容是這樣的:python:正在改變的閱讀文件

src=123.45.67.89 ttl: 64 last_seen: 4298265432 oldest_pkt: 1 4298265432 
src=132.45.67.89 ttl: 64 last_seen: 4298265432 oldest_pkt: 1 4298265432 
src=231.45.67.89 ttl: 64 last_seen: 4298265432 oldest_pkt: 1 4298265432 

我可以使用標準的

line = f.readline() 

還是有一些更好的方式來讀取這個文件。我關心的是要避免任何可能的不一致,當閱讀一個正在改變的文件時(線條被添加,刪除等)

+0

我建議你閱讀http://stackoverflow.com/questions/12523044/how-can-i-tail-a-log-file-in-python因爲問題似乎非常相似 – frans

+0

你想要做些什麼或者只是想展示一下?你在做什麼? – RickyA

+0

是的,我需要處理這些行。我的操作系統是Debian,以防萬一。 –

回答

1

關於python的好處是,可以從「與您有同樣問題的人」 。

對於「看」的文件,並作用於更改,請參閱:https://pypi.python.org/pypi/watchdog/0.7.0

對於一個更一般的「殼」的包裝解決方案,請參閱:https://pypi.python.org/pypi/plumbum 後者讓你做from plumbum.cmd import tail,然後只需運行tail['/proc/net/xt_recent/PORTSCAN', '-1']你的循環內就好像你在殼裏一樣。

2

David Beazley在Generator Tricks for Systems Programmers上進行了精彩的演講。

特別是,查看處理無限數據部分。您可以使用他的代碼實時跟蹤文件,如Unix中的tail -f