Expect_before amd expect_after with perl and expect.pm
Posted on 2006-01-20 20:40:59-08 by manuel
Hi, I usually use expect_after and expect_before with expect to control timeout's and eof in my scripts:
! /usr/bin/expect spawn ssh manuel@linux01 set timeout 2 expect_before { timeout {puts "timeout before"; exit} } expect_after { eof {puts "eof after"; exit} } expect { "assword: " {send "password"} } ...
I tried something similar with expect.pm, but it doesn't work:
use strict; use Expect; my $exp = new Expect(); my @param=qw(root@linux); $exp->spawn("ssh",@param) || die ("error en comando: $! \n"); $exp->exp_before( 'timeout', \&timeout); $exp->exp_after( 'eof', \&eof); $exp->expect(2,'-re',"bssword"); ... sub timeout { print "algo por timeout\n"; exit; } sub eof { print "algo por eof\n"; exit; }
Why exp_before don't work like expect_before? Regards
Posted on 2006-02-06 10:34:12-08 by rgiersig in response to 1669
Short answer: I didn't need exp_before and exp_after (I prefer to use the callback style and write out all the possibilities explicitely), so I didn't invest anything into the code (just took the code that Austin had written).
How about writing it like this:
$exp->expect(2, [ "assword", sub { $exp->send("$password\r\n"); } ], [ 'timeout', \&timeout ], [ 'eof', \&eof ], );
Posted on 2006-03-04 16:36:31-08 by manuel in response to 1760
It's not what I want, but it works. thank's
(This article is based on a thread on the CPAN::Forum.)
Published on 2006-01-20