Thanks!  However, stderr.gets hangs as well.  Here's what the irb session looks like:

irb(main):001:0> require 'open3'
=> true
irb(main):002:0> stdin, stdout, stderr = Open3.popen3("ssh crasch / gatewaymachine.com -i /Users/crasch/.ssh/id_rsa.pub -L 
2222:targetmachine:22 -N")
=> [#<IO:0x10c0534>, #<IO:0x10c04f8>, #<IO:0x10c0494>]
irb(main):003:0> stderr.gets <--- hangs here


Could it be that stderr has received a partial error message, but won't write anything out until it receives a signal 
that ssh process has ended?

Chris





switheyw / yahoo.com wrote:
> The fix is simple - replace 'read' with 'gets', ie, puts stderr.gets.
> 
> 
> 
> On Feb 25, 7:49 pm, Christopher Rasch <cra... / gmail.com> wrote:
>> Hi,
>>
>> I'm trying to write a script that will establish an ssh tunnel through
>> "gatewaymachine.com" to a "targetmachine" on the other side.  Sometimes
>> there's already a tunnel established on the same port, in which case,
>> the command fails with an error message.
>>
>> I'd like to be able to read the error message from the script.  If the
>> script failed due to an incorrect port number, I'd like increment the
>> port number and try again.
>>
>> Based on my google search, the popen3 command from the open3 library is
>> what I want to use.
>>
>> But when I try to read from stderr, the read command never returns.
>> Here's the code:
>>
>> require 'open3'
>>
>> stdin, stdout, stderr = Open3.popen3("ssh cra... / gatewaymachine.com -i
>> /Users/crasch/.ssh/id_rsa.pub -L 2222:targetmachine:22 -N")
>>
>> puts stderr.read <---hangs indefinitely here
>>
>> Any suggestions for what might be happening?  Thanks for any suggestions
>> you may wish to provide.
>>
>> Chris
> 
> 
> 
> 
> 
>