Python - 不是从文件中读取?

时间:2013-08-21 05:29:08

标签: python file-io generator

我正在使用生成器处理无限数据,位于here,这对于从文件返回尾部非常简单:

here的源代码)

# follow.py
#
# Follow a file like tail -f.

import time
def follow(thefile):
    thefile.seek(0,2)
    while True:
        line = thefile.readline()
        if not line:
            time.sleep(0.1)
            continue
        yield line

# Example use
# Note : This example requires the use of an apache log simulator.
# 
# Go to the directory run/foo and run the program 'logsim.py' from
# that directory.   Run this program as a background process and
# leave it running in a separate window.  We'll write program
# that read the output file being generated
# 

if __name__ == '__main__':
    logfile = open("run/foo/access-log","r")
    loglines = follow(logfile)
    for line in loglines:
        print line,

我的问题是使用测试文件'/var/log/test.log',当我写入它时,它不会向控制台打印任何内容,而是我的生成器正在处理。

我可以从其他终端打印文件,看看是否添加了新行,但python代码似乎没有读取新数据?

我认为这可能是从/ var / log /读取的问题所以我在/ Users / Me / Python /中创建了另一个文件,它仍然无法读取数据。

我觉得我错过了一些非常简单的事情:(

编辑:

(我在OSX,Python 2.7.5顺便说一下)我一行一行地试了一下,就像这样:

FID = open(fileName, 'r')
FID.seek(0,2)
FID.tell() # For example says 125
FID.readlines() # returns []
# Now I edit the log file, add in a couple of new lines (in TextMate if that helps)
FID.readlines() # returns []
FID.seek(0,2)
FID.tell() # returns 125
os.stat(fileName) # says size is 142

我的文件描述符是否没有读取更新的文件?

1 个答案:

答案 0 :(得分:0)

使用Brew的Python 2.7.8在OSX Yosemite上遇到同样的问题

通过在尝试读取新添加的数据之前添加以下内容来修复它: FID.seek(0,os.SEEK_CUR)

这并没有真正改变文件指针,但以某种方式使一些缓存状态无效并看到新数据。

请告诉我这是否适合你。