我想在Lua中输出tailf
或tail -F
或类似的东西,而不会阻塞或锁定。如果文件被截断或日志旋转,程序将检测到它并返回到开始。这似乎是一级问题,但对我来说看起来很奇怪。我只是想不出来。有人可以分享一些代码吗?
答案 0 :(得分:0)
我想到了两个想法,您可以将tail -F
的输出直接输入到脚本执行中。从那里你可以从stdin
读取它。也许是这样的:
local c = 0
for line in io.stdin:lines() do
c = c + 1
print(c, line)
end
问题是tail
使用stderr
报告文件截断,因此除非您找到某种方法将stderr
重定向到stdin
,否则脚本将无法看到该文件
另一个想法是使用io.popen
并在主循环之前强制stderr
- > stdin
重定向。然后,您可以使用任何标准模式匹配器来检查尾部截断。
local tailin = io.popen('tail -F '..(...)..' 2>&1', 'r')
local c = 0
for line in tailin:lines() do
c = c + 1
print(c, line)
c = line:match 'truncated' and 0 or c
end
请注意,这两种方法都阻止了btw。