【发布时间】:2010-08-14 11:06:21
【问题描述】:
我正在尝试实现一个简单的方法,以便在每次调用该方法时从日志文件中读取新行。
我查看了有关 stackoverflow(例如 here)和其他地方的各种建议,用于模拟“尾部”功能;大多数涉及使用readline() 在新行附加到文件时读取它们。它应该足够简单,但不能让它在 OS X 10.6.4 和包含的 Python 2.6.1 上正常工作。
为了解决问题的核心,我尝试了以下方法:
打开两个终端窗口。
-
在一个中,创建一个包含三行的文本文件“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 相同。
我必须在这里遗漏一些基本的东西。有什么想法吗?
【问题讨论】:
-
如果你使用 os.SEEK_END 而不是文字 2,你会得到不同的结果吗?
-
Macha - 没有区别。问题是我的测试场景...