From: David.Stagner@... Date: 2002-09-19T02:52:07+09:00 Subject: Re: Capturing stdout from cmd while letting it print it This is a multipart message in MIME format. --=_alternative 004DB69586256C38_= Content-Type: text/plain; charset="us-ascii" Assuming you're in a command-line context, what you want is the "tee" command. It's standard in unix, and available for Windows in either cygwin (open source), or the MKS Toolkit (commercial). Pipe the output of your script to tee, and it prints it to a file as well as passing through to stdout. You run something like this: $ myscript.rb | tee myscript.out The output of myscript.rb appears on the screen, and goes to myscript.out as well. Another useful trick when doing this is to redirect stderr to stdout, then tee it: $ myscript.rb 2>&1 | tee myscript.out This may not be exactly the answer you're looking for, but believe me, learning unix-style shell programming is a LOT faster and more flexible than doing it all in Ruby, or any other scripting language. The Unix shell is a wondrous thing. coma_killen@fastmail.fm 09/18/02 02:10 AM Please respond to ruby-talk To: ruby-talk@ruby-lang.org (ruby-talk ML) cc: Subject: Capturing stdout from cmd while letting it print it Hi, I want to capture the output from a program but still have it print to STDOUT. I tried r = [] IO.popen("mycmd") do |pipe| while (line = pipe.gets) r << line STDOUT.puts line end end but the output will only come after the command has finished running. This doesn't work here since the command runs for very long and the user will want the output. Is there a pure-Ruby way (that works on Windows!) for capturing the output of a command without "disturbing" its normal output to STDOUT? Sorry if this is very basic but I have a windows background... ;-) Regards, Karsten --=_alternative 004DB69586256C38_= Content-Type: text/html; charset="us-ascii"
Assuming you're in a command-line context, what you want is the "tee" command.  It's standard in unix, and available for Windows in either cygwin (open source), or the MKS Toolkit (commercial).  Pipe the output of your script to tee, and it prints it to a file as well as passing through to stdout.  You run something like this:

$ myscript.rb | tee myscript.out

The output of myscript.rb appears on the screen, and goes to myscript.out as well.  Another useful trick when doing this is to redirect stderr to stdout, then tee it:

$ myscript.rb 2>&1 | tee myscript.out

This may not be exactly the answer you're looking for, but believe me, learning unix-style shell programming is a LOT faster and more flexible than doing it all in Ruby, or any other scripting language.  The Unix shell is a wondrous thing.



coma_killen@fastmail.fm

09/18/02 02:10 AM
Please respond to ruby-talk

       
        To:        ruby-talk@ruby-lang.org (ruby-talk ML)
        cc:        
        Subject:        Capturing stdout from cmd while letting it print it


Hi,

I want to capture the output from a program but still have it print to
STDOUT.
I tried

r = []
IO.popen("mycmd") do |pipe|
 while (line = pipe.gets)
   r << line
   STDOUT.puts line
 end
end

but the output will only come after the command has finished running.
This doesn't
work here since the command runs for very long and the user will want
the output.

Is there a pure-Ruby way (that works on Windows!) for capturing the
output of
a command without "disturbing" its normal output to STDOUT?

Sorry if this is very basic but I have a windows background... ;-)

Regards,

Karsten


--=_alternative 004DB69586256C38_=--