Initial File: line 1 line 2 line 3 File after append 1: line 1 line 2 line 3 lin File after append 2: line 1 line 2 line 3 line 4
如果我做了“tail -f文件名”,然后如上所述更新文件,
尾部跟随半行的更新,还是只返回primefaces线?
即
我保证在追加1后看/不看“lin”吗? 如果在“第4行”之后没有\ n,我会看到它吗?
特别是,我对是否可以读取primefaces线感兴趣。 我正在运行日志监视应用程序,我只想parsing完整的行。 日志文件可能会更新到半行,如果尾巴不能保证primefaces线,我将不得不防范(即通过char读取char,然后在看到\ n时识别一行)。
在我的Mac( 9.8.0 Darwin coreel Version 9.8.0
)上,内置tail
显示了附加到文件的字符。 这是一个小测试:
import sys, time def write(fname): fd = open(fname, 'wb') try: while True: for i in range(0, 5): fd.write('a') fd.flush() print >>sys.stderr, "Wrote a char" time.sleep(2) fd.write('\n') fd.flush() print >>sys.stderr, "Wrote newline" time.sleep(2) finally: fd.close() if __name__ == '__main__': write(sys.argv[1])
运行: python test.py test.txt
然后tail -f test.txt
。 它显示为。
那么根据手册页:
-f, --follow[={name|descriptor}] output appended data as the file grows; -f, --follow, and --follow=descriptor are equivalent
所以这意味着你会看到每个字符附加,而不只是在新的一行。 但是,我想尾巴使用某种冲洗策略,所以你看到的可能取决于文件更新速度有多快。 我只能建议你尝试一下。
事情是有缓冲。
尾巴可能会做缓冲,但来源可能是线性缓冲。 如果源代码在您的控制之下,请尝试禁用输出缓冲并查看结果如何