我正在尝试使用Net :: Telnet模块来设置测试自动化。我的测试依赖于更改目录和执行测试。
这是代码
use warnings;
use strict;
use Net::Telnet;
my $telnetObject = Net::Telnet->new(Timeout => 10);
$telnetObject->open("10.30.16.113");
$telnetObject->waitfor('/login/');
$telnetObject->print("john");
$telnetObject->waitfor('/{\d+}/');
#
my $fh = $telnetObject->input_log("output.txt");
$telnetObject->prompt('/{\d+}/');
$telnetObject->cmd_remove_mode(1); # omit command echo from output
$telnetObject->print('cd test/displayBlock');
my @lines2 = $telnetObject->waitfor('/{\d+}/');
print @lines2;
以下是输出日志:
> 0x00000: 63 64 20 74 65 73 74 2f 64 69 73 70 6c 61 79 42 cd test/displayB
> 0x00010: 6c 6f 63 6b 0d 0a lock..
< 0x00000: 63 64 20 74 65 73 74 2f 64 0d 3c 64 20 74 65 73 cd test/d.<d tes
< 0x00010: 74 2f 64 69 20 20 20 20 20 20 20 20 20 20 20 20 t/di
< 0x00020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
< 0x00030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
< 0x00040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
< 0x00050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
< 0x00060: 20 20 20 0d 3c 64 20 74 65 73 74 2f 64 69 73 70 .<d test/disp
< 0x00070: 6c 61 79 42 6c 6f 63 6b 0d 0a layBlock..
< 0x00000: 3c <
出于什么原因,它在最后一次waitfor命令时超时。
请帮助:(
由于
答案 0 :(得分:0)
我认为这里的根本问题是您错过了回车(\ r)
通常当您与telnet等终端进行交互时,您会注意到每次按一个键时,终端都会使用相同的ascii字符回显该键。如果您使用屏幕等程序并打开日志记录,您确实可以看到将使用\ r \ n回显返回键。这就是你解决这个问题的方法。
$telnetObject->prompt('/{\d+}/');
$telnetObject->cmd_remove_mode(1); # omit command echo from output
$telnetObject->print('cd test/displayBlock\r');
谢谢 希望这有助于