我很期待。我正在使用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
答案 0 :(得分:1)
不确定some command
是什么,但您应该发送"some command\n"
,因为在您按Enter键之前,telnet不会发送您的命令。此外,如果send
调用是您脚本中的最后一个(如示例所示),它可能会在发送之前退出,因此要么在最后sleep
之后进行send
调用,或使用soft_close
正确关闭期望。