我正在尝试实现一种简单的方法,以在每次调用该方法时从日志文件中读取新行。
我查看了关于stackoverflow(例如here)和其他地方模拟“tail”功能的各种建议;大多数涉及使用readline()
读取新行,因为它们被附加到文件中。它应该足够简单,但不能让它在带有 Python 2.6.1 的 OS X 10.6.4 上正常工作。
为了解决问题的核心,我尝试了以下方法:
打开两个终端窗口。
在其中,创建一个包含三行的文本文件“test.log”:
one two three
另一方面,启动python并执行以下代码:
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) [GCC 4.2.1 (Apple Inc. build 5646)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> os.stat('test.log') posix.stat_result(st_mode=33188, st_ino=23465217, st_dev=234881025L, st_nlink=1, st_uid=666, st_gid=20, st_size=14, st_atime=1281782739, st_mtime=1281782738, st_ctime=1281782738) >>> log = open('test.log') >>> log.tell() 0 >>> log.seek(0,2) >>> log.tell() 14 >>>
因此,我们看到将
tell()
我们seek(0,2)
带到文件末尾,如第os.stat()
14 字节所报告的那样。在第一个 shell 中,将另外两行添加到“test.log”,使其看起来像这样:
one two three four five
回到第二个 shell,执行以下代码:
>>> os.stat('test.log') posix.stat_result(st_mode=33188, st_ino=23465260, st_dev=234881025L, st_nlink=1, st_uid=666, st_gid=20, st_size=24, st_atime=1281783089, st_mtime=1281783088, st_ctime=1281783088) >>> log.seek(0,2) >>> log.tell() 14 >>>
在这里我们看到os.stat()
文件的大小现在是 24 字节,但是以某种方式寻找到文件的末尾仍然指向 14 字节?我已经在 Ubuntu 上使用 Python 2.5 进行了同样的尝试,它可以按我的预期工作。我在我的 Mac 上尝试了 2.5,但得到了与 2.6 相同的结果。
我必须在这里遗漏一些基本的东西。有任何想法吗?