[英]Telnet Session using Expect Module fails to send command ctrl+A
我正在尝试连接到信令点交换机。
我需要执行以下命令才能登录终端。
然后,我必须继续执行一些命令以进一步操作,但是我的问题是在发送CTRL + A时遇到问题。
当我使用Expect发送“ ctrl + A”时,它仅打印“ ^ A”,并且等待不向我提供终端。
因此,我通过将命令更改为“ ctrl + A \\ n”来修改了脚本,这为我提供了终端,但是在我的下一个终端提示符下添加了新行。
像下面的输出:
^A
^A
^A
>
wait's here at next line.
无法匹配我的下一个命令正则表达式“>”,并且不发送登录名。
有人可以告诉我为什么我的第一个命令“ ^ A”无法使我处于终端状态吗? 为什么在我获得终端之前命令被执行了3次?
我手动场景对于单个ctrl + A来说效果很好
我的示例代码:
use Expect;
my $exp = Expect->spawn("telnet 10.10.1.35 2020");
$exp->expect($timeout,
[ qr/]'./ => sub {my $exp = shift;
$exp->send("\cA\n");
} ]
);
$exp->expect($timeout,
[ qr/>/ => sub { my $exp = shift;
$exp->send("login:uid=user\n");
} ]
);
$exp->expect($timeout,
[ qr/Enter Password :/ => sub { my $exp = shift;
$exp->send("xxx\n");
} ]
);
谢谢你,Pradeep。
尝试send "\\01"
请咨询更多信息http://expect.sourceforge.net/FAQ.html#q54
我喜欢按字面值输入大多数控制字符-因为生成的脚本更具可读性。 但是,您的编辑器必须允许这样做。 例如,假设您要发送Control-A。 按照惯例,大多数编辑器将其显示为^ A,但您不能仅输入^和A。(这将仅发送这两个字符。)大多数编辑器具有一些简单的引号机制,可让您按字面值输入下一个字符。 例如,使用emacs,我可以输入^ Q ^ A,这将添加单个字符^ A。
或者,Tcl提供了一种使用八进制或十六进制编码的方式。 八进制编码机制比十六进制更容易出错,因此我将演示使用八进制。 例如,由于^ A在ASCII中具有八进制值1,因此要发送^ A:
send "\01"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.