Вот мой код, написанный с использованием Net::Telnet
Проблема тут только в одном - после первого нажатия Enter мне на экран не появляется строка, а просто остается пустота, а при следующих нажатиях любых клавиш идет отставание на 1 символ в выводе....
Странно то, что я смотрю tail -f /tmp/out.log и tail -f /tmp/inp.log и там всё идет вовремя за исключением злополучного Enter'а
#!/usr/local/bin/perl -w
sub printhelp {
print "============= HELP ==============\n";
print "To connect to host type\n:<hostname>\n";
print "with <hostname> changed to cisco hostname or IP address\n\n";
print "To see help type help\n";
}
sub get_login {
print "Username:";my chomp($username=<STDIN>);
print "Password:";my chomp($password=<STDIN>);
}
use Term::ReadKey;
use Net::Telnet;
use Net::Ping;
start:
#$p = Net::Ping->new();
while (not defined($cmd)){
print "CIPE>";$input=<STDIN>;
if ($input =~ /\:(.*)\n/) {$cmd=$1;}
else {&printhelp;goto start;}
# if ($p->ping($cmd)){
print "Connecting to $cmd\n";
$conn = new Net::Telnet (Timeout => 5,
Dump_log=>"/tmp/dul2.log",
input_log=>"/tmp/out.log",
output_log=>"/tmp/inp.log",
binmode=>1
);
if (not defined($password)){&get_login;}
$conn->open(host => $cmd);
$conn->waitfor('/Username.*$/');
$conn->print($username);
print ($conn->get);
$conn->waitfor('/Password.*$/');
$conn->print($password);
print ($conn->get);
while($conn){
Readmode 4;
while(not(ReadKey(-1))){
if (defined($key)){
$conn->put($key);
print ($conn->get);
undef(key);
}
}
}
}
|