1

Cisco デバイスに telnet で接続し、Cisco デバイスに telnet で接続し、コマンド 'show int status err' を実行する次の Ruby スクリプトを作成しました。

require 'net/telnet'

C3550_20_PterraEst = "192.168.244.20" #Enter the IP address here

USER = "user" #Enter username here

PASS = "password" #Enter password here

ENABLE = "password" #Enter enable password here

print "Selezionare il piano [0-1-2-All]: ";

# get the input from the console, 
val1 = gets;
tn = Net::Telnet::new("Host" => C3550_20_PterraEst,
"Timeout" => 5,
"Prompt" => /Username/ )
tn.cmd("\n#{USER}") 
tn.cmd(PASS) 
tn.cmd("sh int status err\n") { |c| print c }
exit

ここで、これらの Cisco デバイスの出力 (「show int status err」を送信したとき) をスクリプト内の変数に割り当てる必要があります...もっと詳しく説明します。

コマンド「show int status err」が次の値を返すとします。

Int fa0/20 Int fa0/25

次のようなことをしたい... variable1 = 'Int fa0/20,Int fa0/25' その後、スクリプト内で variable1 を使用します。

魔女のように私はできますか?

4

2 に答える 2

1

私はあなたがしたいことではないと思います:

tn.cmd("sh int status err\n") { |c| print c }

むしろ:

response = tn.cmd("sh int status err\n")

NET::Telnet のドキュメントによると、Telnet#cmd は応答を返します。ブロックに渡すと、ブロックへの応答も生成されますが、応答を変数に格納する場合は、私の例がそれを行うための最良の方法です。

STD への応答も出力したい場合は、次のように両方を実行できるはずです。

response = tn.cmd("sh int status err\n") { |c| print c }

ただし、tn.cmd("sh int status err\n") { |c| print c } でエラーが発生します。エラーが発生する理由を理解するまで、私の解決策は機能しない可能性があります。トラブルシューティングのヘルプが必要な場合は、コメントに追加してください。

以上のことから、スクリプトが telnet の応答に応じて追加のコマンドを生成することを希望する場合は、[expect][1].

于 2012-05-18T13:49:45.797 に答える
0

この行のtn.cmd("sh int status err\n") { |c| print c }cはコマンドからの戻り値ですが、ローカル変数であるため、そのブロックに存在します。ただし、インスタンス変数を使用してそれを含めることができます。これにより、ブロック外で使用できるようになります。

于 2012-05-18T09:28:38.403 に答える