繁体   English   中英

使用Expect模块的Telnet会话无法发送命令ctrl + A

[英]Telnet Session using Expect Module fails to send command ctrl+A

我正在尝试连接到信令点交换机。

我需要执行以下命令才能登录终端。

  1. telnet IP端口
  2. 发送CTRL + A
  3. 提示“>”
  4. 发送命令login:uid = user。
  5. 密码请求提供密码。
  6. 获取终端“>”

然后,我必须继续执行一些命令以进一步操作,但是我的问题是在发送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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM