Capturing the output of an external program line by line

Hi,

I want to run an external program in ruby. The external program takes
a long time to execute. While running, it gives the information on
stdout about what it is doing. How can I run the external program
inside ruby so that I can capture this information, and display it on
stdout? I tried %x{…}, ... and system("…"), but all of them
give me a result AFTER the external program has finished executing,
not during its execution.

Thanks,
Aditya

Am Mon, 15 Oct 2007 04:23:41 +0900
schrieb Aditya M. [email protected]:

Thanks,
Aditya

in,out = IO.popen($command)

in refers to standart input of the program
out to the standart output

you can receive lines from the program using in.gets. Beware, “in” may
be a reserved word in ruby.

Aditya M. wrote:

Thanks,
Aditya

I’ve been using this:

IO.popen("#{cmd} 2>&1") do |f|
  while line = f.gets do
    # do whatever you want with line
  end
end

Note that this gets both stdout and stderr.

Tim H. wrote:

Aditya M. wrote:

Thanks,
Aditya

I’ve been using this:

IO.popen("#{cmd} 2>&1") do |f|
  while line = f.gets do
    # do whatever you want with line
  end
end

Note that this gets both stdout and stderr.

Thank you Tim and Markus. Both your methods work perfectly. Since I just
needed to capture the program’s output, I am using Tim’s method.

Thanks,
Aditya

Markus S. wrote:

in,out = IO.popen($command)

in refers to standart input of the program
out to the standart output

Are you absolutely sure IO.popen returns an array of two IOs?

mortee