运行log.py
befure follow.py
它可以正常工作,就像tail -f
一样,但在follow.py
之前运行log.py
它不起作用,如果我使用vim添加文件中的某些内容access-log
,它不起作用。
为什么?
flush
之前没有写\0
而readline
读\0
后它没有继续或其他什么?
flush
和readline
的详细信息是什么?
# log.py
f = open("access-log","w")
import time, random
while True:
time.sleep(random.random())
n = random.randint(0,len(ips)-1)
m = random.randint(0,len(docs)-1)
t = time.time()
date = time.strftime("[%d/%b/%Y:%H:%M:%S -0600]",time.localtime(t))
print >>f,"%s - - %s %s" % (ips[n],date,docs[m])
f.flush()
# follow.py
import time
def follow(thefile):
thefile.seek(0,2) # Go to the end of the file
while True:
line = thefile.readline()
if not line:
time.sleep(0.1) # Sleep briefly
continue
yield line
# Example use
if __name__ == '__main__':
logfile = open("access-log")
for line in follow(logfile):
print line,
答案 0 :(得分:1)
如果您先运行follow.py
,它会打开访问日志并不断尝试从中读取内容。
然后log.py
出现并调用open("access-log", "w")
删除现有的access-log
文件并创建一个新文件。
由于follow.py
打开了原始文件,操作系统会维护一个文件句柄,但它不再是相同的文件名(实际上它根本没有名称。)follow.py
从来不知道创建的新文件,并且永远无法从原始文件句柄读取。
或许log.py
应该使用"a"
而不是"w"
来打开?