On Fri, Feb 23, 2007 at 12:43:43PM +0900, Ezra Zygmuntowicz wrote:
> 
> On Feb 22, 2007, at 7:33 PM, Robert La Ferla wrote:
> 
> >I need to communicate with a sftp server from a Ruby script.   
> >What's the best way to do this?  I am looking for something like  
> >"expect"  I found a way to spawn and expect using the "pty"  
> >standard lib but I didn't see a "send"  I found a rexpect on  
> >RubyForge but that looks like it hasn't been maintained in months.   
> >What should I be looking at?
> 
> 	You should check out net/ssh and net/sftp:
> 
> http://raa.ruby-lang.org/project/net-sftp/
> http://raa.ruby-lang.org/project/net-ssh/

There's a simpler solution using built-in libraries:

(1) require 'expect.rb' which is included in the standard library

-----------------------------------------------------------------------
$ cat /usr/share/doc/libruby1.8/pty/README.expect
        README for expect
                by A. Ito, 28 October, 1998

        Expect library adds IO class a method called expect(), which
does similar act to tcl's expect extension.

The usage of the method is:

   IO#expect(pattern,timeout=9999999)

where `pattern' is an instance of String or Regexp and `timeout'
is Fixnum, which can be omitted.
        When the method is called without block, it waits until the
input which matches the pattern is obtained from the IO or the time
specified as the timeout passes. When the pattern is obtained from the
IO, the method returns an array. The first element of the array is the
entire string obtained from the IO until the pattern matches. The
following elements indicates the specific pattern which matched to the
anchor in the regular expression. If the method ends because of
timeout, it returns nil.
        When the method is called with block, the array is passed as
the block parameter.
-----------------------------------------------------------------------

(2) use IO.popen to start your client program (or use the built-in open3.rb
library if you want to catch stderr separately)

HTH,

Brian.