期望Perl不在服务器上发送命令

时间:2014-09-20 10:13:05

标签: perl expect

我很期待。我正在使用Expect.pm在远程服务器上发送一些命令。脚本正在执行telnet,但在匹配提示符后没有发送命令。

以下是剧本:

use Expect;
use strict;
use warnings;
my $obj = new Expect;
$obj = Expect->spawn("telnet 47.134.117.133");
my $val =  $obj->expect(15, "<");
#print "****$val****";
sleep 5;
$obj->debug(1); # after a comment i modified this#
$obj->send("some command");

我尝试打印val并返回1。但不是在终端上发送命令。我有什么问题吗?

根据一条评论,我在发送命令为$obj->debug(1)之前尝试了调试命令。它输出为

< Closing spawn id(5).
 at /usr/lib/perl5/site_perl/5.14/Expect.pm line 1386
        Expect::hard_close('Expect=GLOB(0x6002b0560)') called at /usr/lib/perl5/site_perl/5.14/Expect.pm line 1575
        Expect::DESTROY('Expect=GLOB(0x6002b0560)') called at expect.txt line 0
        eval {...} called at expect.txt line 0
spawn id(5) closed.
Pid 968 of spawn id(5) terminated, Status: 0x01

1 个答案:

答案 0 :(得分:1)

不确定some command是什么,但您应该发送"some command\n",因为在您按Enter键之前,telnet不会发送您的命令。此外,如果send调用是您脚本中的最后一个(如示例所示),它可能会在发送之前退出,因此要么在最后sleep之后进行send调用,或使用soft_close正确关闭期望。