gpt4 book ai didi

lua - 我如何在 lua 中 tail -F 一个日志文件(截断感知)?

转载 作者:行者123 更新时间:2023-12-04 22:43:21 26 4
gpt4 key购买 nike

我想在 Lua 中使 tailftail -F 或类似的输出对我可用,而无需阻塞或锁定。如果文件被截断或日志轮换,程序将检测到它并返回到开始。这似乎是 1 级问题,但对我来说看起来很奇怪。我只是想不通。有没有人可以分享一些代码?

最佳答案

我想到了两个想法,您可以直接将 tail -F 的输出通过管道传输到您的脚本执行中。从那里你可以从 stdin 读取它。也许是这样的:

local c = 0
for line in io.stdin:lines() do
c = c + 1
print(c, line)
end

一个问题是 tail 使用 stderr 来报告文件截断,所以脚本不会看到它,除非你找到某种方法来重定向 stderrstdin

另一个想法是使用 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

请注意,顺便说一下,这两种方法都是阻塞的。

关于lua - 我如何在 lua 中 tail -F 一个日志文件(截断感知)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17363973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com