perl Net :: Telnet wait_for среднего символа, в то время как действие "print" все еще буферизует данные - PullRequest
0 голосов
/ 25 октября 2010

Я использую Perl с модулем Net :: Telnet .

Моя проблема заключается в том, что при отправке команды, которая имеет выход 1000 строк, "wait_for" ищетстрока посередине.

wait_for останавливается, но буфер все еще хранит выходные данные команды.

проблема в следующей команде, которую я посылаю - я получаю остальныевывода первой команды.

#!/usr/bin/perl
use Net::Telnet;

$session = new ... ();
$session->print("cmd 1");
my $output = $session->wait_for(String => "AAA");

$session->buffer_empty;
$session->print("cmd 2");
my $output2 = $session->wait_for(String => "#");

Я попытался отправить "$ session-> buffer_empty", но это не помогло.Кто-нибудь знает, что здесь происходит?

1 Ответ

1 голос
/ 26 октября 2010

Проблема может заключаться в том, что cmd 1 все еще заполняет входной буфер даже после вызова buffer_empty. Если вы знаете, что находится в самом конце вывода cmd 1, лучшим решением было бы добавить еще waitfor, чтобы убедиться, что «cmd 1» завершил работу перед выдачей «cmd 2».

#!/usr/bin/perl
use Net::Telnet;

$session = new ... ();
$session->print("cmd 1");
my $output = $session->wait_for(String => "AAA");

$session->wait_for(Match => '/>$/');
$session->buffer_empty;

$session->print("cmd 2");
my $output2 = $session->wait_for(String => "#");

Другой вариант - добавить sleep перед вызовом buffer_empty.

.
...