5

実行中にスクリプトの出力を定期的に読み取るにはどうすればよいですか?

youtube-dl の場合、ダウンロード中の動画に関するダウンロード情報 (progress/speed/eta) を端末に送信します。

次のコードを使用すると、スクリプト出力 (Linux 上) の合計結果を一時ファイルにキャプチャできます。

tmpFile = io.open("/tmp/My_Temp.tmp", "w+")
f = io.popen("youtube-dl http://www.youtube.com/watch?v=UIqwUx_0gJI", 'r')

tmpFile:write(f:read("*all"))

スクリプトが完了するのを待って最後にすべてのデータを書き込むのではなく、youtube-dl が端末に送信した最新情報の「スナップショット」をキャプチャできるようにしたいと考えています。

私の全体的な目標は、Iup を使用して進行状況バーを設計するために、ダウンロード情報を取得することです。

ダウンロード情報を取得するためのよりインテリジェントな方法があれば、私も喜んでアドバイスをいたします。

とにかく、io.popen()、os.execute()、または他のツールをそのような方法で使用できる場合、リアルタイムのコンソール出力をキャプチャする方法を知りたいです。

4

1 に答える 1

4

これは、Windows と Linux の両方で正常に機能します。ラインはリアルタイムで表示されます。

local pipe = io.popen'ping google.com'
for line in pipe:lines() do
    print(line)
end
pipe:close()

UPD:
以前のコードが機能しなかった場合は、次のことを試してください(デュアルが提案されているように):

local pipe = io.popen'youtube-dl with parameters'
repeat
    local c = pipe:read(1)
    if c then 
        -- Do something with the char received
        io.write(c)  io.flush()
    end
until not c
pipe:close()
于 2013-07-14T10:44:55.037 に答える