1

以下のようにperlスクリプトでtelnetコマンドを実行しています。

$telnetOutput = `telnet localhost 4505`;
print "\n telnet command output: $telnetOutput \n";

$clients = `clients`;
print"\n $clients\n";

$clientNumber_or_anyOtherKey = `1`;
print "\n $clientNumber_or_anyOtherKey \n";

$pollers = `pollers`;
print "\n $pollers\n";`

しかし、 $telnetOutput = `telnet localhost 4505`;を実行した後 コマンドを実行すると、telnet コマンド プロンプトが開きますが、他のすべてのコマンドは同じ古いコマンド prmopt で実行されているため 、内部コマンドまたは外部コマンドとして or が認識されませんclients1pollers

誰か助けてくれませんか?事前に感謝

4

3 に答える 3

3

telnet などの外部プロセスとの通信は、バッファリングや入力の待機などを正しく処理する必要があるため、想像以上に複雑です。

これにアプローチする標準的な方法は、完全な対話が本当に必要な場合は、Expect ( https://metacpan.org/module/RGIERSIG/Expect-1.21/Expect.pod ) を使用することです。

実際に対話が必要ない場合は、sshorのようなリモート コマンド ランナーrsh(もちろん perl から呼び出すことができます) で十分です。

于 2013-04-05T11:04:52.797 に答える
1

これは、d-link des-1228 ルーターへの telnet 接続と 2 つのコマンドの実行の動作例です。必要に応じて変更します。

#!/usr/bin/perl

use strict;
use warnings;
use Net::Telnet;

my $params;
$params{'login'}='root';
$params{'password'}='hardpass';
$params{'default_prompt'}='/DES-[^:]+:.#/'; #change it to regexp matching your prompt
my $host = '192.168.1.20';

my $t=new Net::Telnet(Timeout=>5, Prompt=>$params{'default_prompt'}, Errmode=>sub{next;});
$t->open(Host=>$host, Timeout=>2);
my $res=$t->login($params{'login'}, $params{'password'});
return if $res!=1;
$t->cmd('disable clipaging');
my @lines=$t->cmd('show fdb'); #output here
$t->close();
于 2013-04-05T12:08:26.310 に答える
0

TCLシステムに (Windows 用の ActiveTcl8.5.13.0.296436-win32-ix86-threaded.exe) をインストールします。次にExpect、コマンドからパッケージを次のようにインストールしますteacup install Expect

要件の変更後に以下のスクリプトを実行します

#!/usr/bin/expect -f
#!usr/bin/expect
package require Expect
# Test expect script to telnet.

spawn telnet localhost portnumber
expect "TradeAggregator>"
send "3\r"
expect "Client:"
send "1\r"
expect "1-Client>"
send "2\r"
expect "Client Pollers"
send "2\r"
expect "1-NYMEX UTBAPI"
send "1\r"
expect "2-NYMEX UTBAPI"
send "Test_123\r"
expect "Are"
send "n\r"
send "exit\r"
send "exit\r"
send "exit\r"
# end of expect script.
于 2013-04-07T10:49:32.293 に答える