tailf
or の出力、またはtail -F
同様のものを Lua でブロックまたはロックせずに利用できるようにしたいと考えています。ファイルが切り捨てられたり、ログがローテーションされたりすると、プログラムはそれを検出し、最初に戻ります。これはレベル 1 の質問のようですが、私には奇妙に見えます。私はそれを理解することはできません。誰かがいくつかのコードを共有できますか?
質問する
999 次
1 に答える
0
2 つのアイデアが思い浮かびtail -F
ます。スクリプトの実行に直接出力をパイプするだけです。そこから、 から読み込むことができますstdin
。おそらく次のようなものです:
local c = 0
for line in io.stdin:lines() do
c = c + 1
print(c, line)
end
これに関する問題は、 がファイルの切り捨てを報告するために使用tail
されるため、 .stderr
stderr
stdin
もう 1 つのアイデアは、メイン ループの前に->リダイレクトを使用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 に答える