我想在 Lua 中提供tailf
or或类似的输出,而不会阻塞或锁定。tail -F
如果文件被截断或日志旋转,程序将检测到它并返回开始。这似乎是一个 1 级问题,但对我来说看起来很奇怪。我就是想不通。有人可以分享一些代码吗?
问问题
999 次
1 回答
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
请注意,这两种方法都阻止了顺便说一句。
于 2013-06-29T06:49:45.803 回答