3

tailfor の出力、またはtail -F同様のものを Lua でブロックまたはロックせずに利用できるようにしたいと考えています。ファイルが切り捨てられたり、ログがローテーションされたりすると、プログラムはそれを検出し、最初に戻ります。これはレベル 1 の質問のようですが、私には奇妙に見えます。私はそれを理解することはできません。誰かがいくつかのコードを共有できますか?

4

1 に答える 1

0

2 つのアイデアが思い浮かびtail -Fます。スクリプトの実行に直接出力をパイプするだけです。そこから、 から読み込むことができますstdin。おそらく次のようなものです:

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

これに関する問題は、 がファイルの切り捨てを報告するために使用tailされるため、 .stderrstderrstdin

もう 1 つのアイデアは、メイン ループの前に->リダイレクトを使用io.popenして強制することです。その後、任意の標準パターン マッチャーを使用して末尾の切り捨てをチェックできます。stderrstdin

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 に答える