Read console output realtime in lua

console, io, iup, lua

Solution

This works fine both on Windows and Linux. Lines are displayed in real-time.

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

UPD : If previous code didn't work try the following (as dualed suggested):

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()

Problem

How can I manage to periodically read the output of a script while it is running? In the case of youtube-dl, it sends download information (progress/speed/eta) about the video being downloaded to the terminal. With the following code I am able to capture the total result of the scripts output (on linux) to a temporary file: ``` 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")) ``` Instead of waiting for the script to complete and writing all the data at the end, I would like able to capture "snapshots" of the latest information that youtube-dl has sent to the terminal. My overall goal is to capture the download information in order to design a progress bar using Iup. If there are more intelligent ways of capturing download information I will be happy to take advice as well. Regardless, if it is possible to use io.popen(), os.execute(), or other tools in such a way I would still like to know how to capture the real time console output.

Original source