如何在脚本运行时设置定期读取脚本的输出?
对于youtube-dl,它会发送有关正在下载的视频的下载信息(进度/速度/ 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()或其他工具,我仍然想知道如何捕获实时控制台输出。
答案 0 :(得分:3)
这在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()