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

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.

···

Am Mon, 15 Oct 2007 04:23:41 +0900 schrieb Aditya Mahajan <adityam@umich.edu>:

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

Aditya Mahajan wrote:

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

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.

···

--
RMagick OS X Installer [http://rubyforge.org/projects/rmagick/\]
RMagick Hints & Tips [http://rubyforge.org/forum/forum.php?forum_id=1618\]
RMagick Installation FAQ [http://rmagick.rubyforge.org/install-faq.html\]

Tim Hunter wrote:

Aditya Mahajan 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

···

--
Posted via http://www.ruby-forum.com/\.

Markus Schirp 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