我需要编写一个简单的脚本,它会实时显示/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()
或者是否有更好的方法来阅读此文件。我关心的是避免任何可能的不一致,同时读取正在改变的文件(添加,删除行等)
答案 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中一样。