python:正在改变的读取文件

时间:2014-01-22 19:15:42

标签: python

我需要编写一个简单的脚本,它会实时显示/proc/net/xt_recent/PORTSCAN的内容。这个文件在不断变化,我想在无限循环中读取它并尽可能准确地显示“瞬时”状态。我文件的示例内容如下所示:

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()

或者是否有更好的方法来阅读此文件。我关心的是避免任何可能的不一致,同时读取正在改变的文件(添加,删除行等)

2 个答案:

答案 0 :(得分:2)

David Beazley在Generator Tricks for Systems Programmers上发表了精彩的演讲。

特别是,请查看处理无限数据部分。您可以使用他的代码实时跟踪文件,例如Unix中的tail -f

答案 1 :(得分:1)

关于python的好处是,“与你有同样问题的人”提供的众多软件包。

要“观看”文件并根据更改采取行动,请参阅:https://pypi.python.org/pypi/watchdog/0.7.0

有关更通用的“shell”包装解决方案,请参阅:https://pypi.python.org/pypi/plumbum 后者允许您执行from plumbum.cmd import tail,然后在循环中运行tail['/proc/net/xt_recent/PORTSCAN', '-1'],就好像您在shell中一样。