我可以使用文件吗?以阻塞方式读取行?我这样做对吗?



我正试图写一个东西,监视日志文件,并添加一个时间戳,当它看到一个完整的行:

import sys
f = open(sys.argv[1])
if not f:
    print 'Failed to open %s' % sys.argv[1]
print sys.argv[1]
import time
try:
    while True:
        line = f.readline().replace('n', '')
        if not line:
            continue
        print time.time(), line
except KeyboardInterrupt:
    pass
f.close()

检查行内容是因为,令我惊讶的是,readlines没有阻塞,而是立即返回一个空字符串作为文件的结尾。

那么,对于监视文件,我有几个问题:我是否可以将此设置为阻止?我在这个循环中看到空字符串,有没有可能它们实际上不代表行尾?仍然为写入打开的文件是否添加了行尾字符?

  1. os.path.getsize测试文件大小,看看文件是否有差异
  2. f.readline仅当尺寸不同
  3. 每次读取时首先调用seek以确保您实际上正在读取最后一行。
  4. 使用f.readline()[0:-1]来摆脱尾随的n(感谢rm指出rstrip可能会给你带来问题)
  5. 与其不断地运行这个循环,不如每秒测试一次,并使用sleep(相信我,你的计算机会感谢你的)

您可以使用子进程打开tail类程序并读取其输出,这将阻塞,例如这里是一个快速python尾部

import time
from subprocess import Popen, PIPE
file_path = '/home/auniyal/src/main/app.log'
p = Popen(['tail', '-f', file_path], stdout=PIPE)
while True:
    line = p.stdout.readline()
    print time.time(),"Wow",line

相关内容

最新更新