Net::Telnetの cpan ドキュメントで述べたように:
すべての入力がバッファリングされている間、すべての出力がフラッシュされます。各オブジェクトには、独自の入力バッファーが含まれています。
ざっくり言うと、送信しているコマンドを出力、結果を入力としてバッファリングするということですか?
コマンドを送信して結果を受け取るための次のコードがあります。
sub sendCmd {
my $t = shift @_;
my $query = shift @_;
$t->buffer_empty;
print "Sending command $query to telnet target\n";
@out = $t->cmd(String => $query,Timeout => 70,
Errmode => 'return',Prompt => '/#/');
push(@out, ${$t->buffer});
$t->buffer_empty;
return @out;
}
ここでの問題は、次のようなループがある場合です。
while(1)
{
@res1 = sendCmd('cmd1');
print @res1,"\n";
@res2 = sendCmd('cmd2');
print @res2,"\n";
}
これにより、しばらくの間、予想される交互の出力が得られますが、その後は次のようになります。
問題1:しばらくすると、cmd1の結果がcmd2の結果として表示され、その逆も同様であることがわかります。
問題 2 : コマンド自体が結果に追加されて表示される場合があります。
これらの問題の両方で私を助けてください。その間、waitfor - print の組み合わせに戻そうと考えていました。
ありがとう。