实时在lua中读取控制台输出

如何在脚本运行时定期读取其输出?

在 youtube-dl 的情况下,它会将有关正在下载的视频的下载信息(进度/速度/剩余时间)发送到终端。

使用以下代码,我能够将脚本输出的总结果(在 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() 或其他工具以这种方式捕获实时控制台输出,我仍然想知道如何捕获它。

点赞
用户1847592
用户1847592

这在 Windows 和 Linux 上都可以正常运行。行会实时显示。

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

UPD:

如果之前的代码不起作用,请尝试以下代码(如 dualed 所建议):

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-14 10:44:55