Expect and ruby

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?

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/

Cheers-
– Ezra Z.
– Lead Rails Evangelist
[email protected]
– Engine Y., Serious Rails Hosting
– (866) 518-YARD (9273)

On Fri, Feb 23, 2007 at 12:43:43PM +0900, Ezra Z. wrote:

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.