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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs