Perl telnet命令不发送每个命令

时间:2013-04-16 16:48:30

标签: perl network-programming telnet perl-module telnetlib

我有以下程序,telnet到另一台设备并打印序列号和Mac地址。

我的问题是,出于某种原因,如果我发送命令一旦它跳过第一个命令并发送第二个命令,但如果我复制相同的命令两次它将发送命令。

连续发送命令多个命令的正确方法是什么?

是否应在每次发送命令后刷新缓冲区?

我的环境

Eclipse Ide
Ubuntu 12.10
perl 5, version 14, subversion 2 (v5.14.2)

我的代码片段:

$telnet = Net::Telnet->new($remoteSystem);
$| = 1;
$telnet->buffer_empty();
$telnet->buffer_empty(); 
$result = $telnet->input_log($errorlog);
#$_ = "@lines";
@TSN =$telnet->cmd('export | grep -e SerialNumber..[A-Z] | cut -d"\"" -f2');
@TSN =$telnet->cmd('export | grep -e SerialNumber..[A-Z] | cut -d"\"" -f2');

@mac = $telnet->cmd('ifconfig  | grep eth0 | cut -d" "  -f 11');

print "@TSN AND @TSN @mac";

print FH "$remoteSystem\n";

print "Telnetting into $remoteSystem .\n";    # Prints names of the tcd

close(telnet);
}

foreach (@host) {
    checkStatus($_);
}

OUTPUT跳过第一个命令:

bash-2.02  AND bash-2.02  ifconfig  | grep eth0 | cut -d" "  -f 11
00:11:D9:3C:6E:02
bash-2.02 # 
bash-2.02 Telnetting into debug79-109 .

输出有效,但我必须发送两次相同的命令:

export | grep -e SerialNumber..[A-Z] | cut -d"\"" -f2
AE20001901E2FD1
bash-2.02 # 
bash-2.02  AND export | grep -e SerialNumber..[A-Z] | cut -d"\"" -f2
AE20001901E2FD1
bash-2.02 # 
bash-2.02  ifconfig  | grep eth0 | cut -d" "  -f 11
00:11:D9:3C:6E:02
bash-2.02 # 
bash-2.02 Telnetting into debug79-109 

2 个答案:

答案 0 :(得分:0)

在您对cmd()的调用中指定命令提示符,例如@TSN =$telnet->cmd('export | grep -e SerialNumber..[A-Z] | cut -d"\"" -f2', Prompt => 'bash-2.02 #');

答案 1 :(得分:0)

尝试在为模块telnet创建对象后打开连接

$telnet->open($host);

之后执行waitFor方法:(等待模式 bash-2.02#来)

$telnet->waitFor(/^(bash-\d+.\d+ #)$/);

然后执行你的命令,它会给你正确的输出。