Perl Net::Telnet 检索单行输出
Perl Net::Telnet retrieving single line of output
使用 Perl 的 Net::Telnet 模块从 upsd 检索数据。
我正在尝试实现一个特定的功能,检索单个 var 的数据。
问题是只输出一行,那一行是用来匹配的
提示,所以没有输出。
这是原始远程登录:
telnet dns1 3493
Trying 192.168.15.1...
Connected to dns1.
Escape character is '^]'.
get var cp1500 ups.test.result
VAR cp1500 ups.test.result "Done and passed"
Connection closed by foreign host.
这是一些代码:
#!/usr/bin/perl
use strict;
use warnings;
use Net::Telnet;
my $host = "dns1";
my $model = "cp1500";
my $bvar = "ups.test.result";
my $t = new Net::Telnet (Timeout => 3, Port => 3493, Prompt => "/VAR $model $bvar/");
$t->open($host);
my @ary = $t->cmd("get var $model $bvar");
print @ary,"\n";
这只是打印换行符,因为数组是空的。提示匹配,否则会出现超时错误。我怎样才能取回那一行输出以便在脚本中进行处理?
这是我的解决方案,使用 Socket 而不是 Net::Telnet。
#!/usr/bin/perl
use strict;
use warnings;
use Socket;
my $host = 'str003';
my $port = 3493;
my $model = 'cp1350';
my $quer = 'get var';
my $bvar = 'ups.test.result';
my ($sock,$iaddr,$paddr,$send);
$iaddr = inet_aton($host);
$paddr = sockaddr_in($port, $iaddr);
$send = join(' ',$quer,$model,$bvar);
socket($sock, AF_INET, SOCK_STREAM, 6) or die $!;
connect($sock , $paddr) or die "connect failed : $!";
send($sock , "$send\nlogout\n" , 0);
while (my $line = <$sock>)
{
if ($line =~ /^VAR/) {
print "$line\n";
}
}
close($sock);
这是返回一行数据的那个:
VAR cp1350 ups.test.result "Done and passed"
使用 Perl 的 Net::Telnet 模块从 upsd 检索数据。 我正在尝试实现一个特定的功能,检索单个 var 的数据。 问题是只输出一行,那一行是用来匹配的 提示,所以没有输出。
这是原始远程登录:
telnet dns1 3493
Trying 192.168.15.1...
Connected to dns1.
Escape character is '^]'.
get var cp1500 ups.test.result
VAR cp1500 ups.test.result "Done and passed"
Connection closed by foreign host.
这是一些代码:
#!/usr/bin/perl
use strict;
use warnings;
use Net::Telnet;
my $host = "dns1";
my $model = "cp1500";
my $bvar = "ups.test.result";
my $t = new Net::Telnet (Timeout => 3, Port => 3493, Prompt => "/VAR $model $bvar/");
$t->open($host);
my @ary = $t->cmd("get var $model $bvar");
print @ary,"\n";
这只是打印换行符,因为数组是空的。提示匹配,否则会出现超时错误。我怎样才能取回那一行输出以便在脚本中进行处理?
这是我的解决方案,使用 Socket 而不是 Net::Telnet。
#!/usr/bin/perl
use strict;
use warnings;
use Socket;
my $host = 'str003';
my $port = 3493;
my $model = 'cp1350';
my $quer = 'get var';
my $bvar = 'ups.test.result';
my ($sock,$iaddr,$paddr,$send);
$iaddr = inet_aton($host);
$paddr = sockaddr_in($port, $iaddr);
$send = join(' ',$quer,$model,$bvar);
socket($sock, AF_INET, SOCK_STREAM, 6) or die $!;
connect($sock , $paddr) or die "connect failed : $!";
send($sock , "$send\nlogout\n" , 0);
while (my $line = <$sock>)
{
if ($line =~ /^VAR/) {
print "$line\n";
}
}
close($sock);
这是返回一行数据的那个:
VAR cp1350 ups.test.result "Done and passed"