Ruby の Net::Telnet に関しての質問です。

telnetできなかった時の処理を書きたいのですが、telnetできなかった場合、
/usr/lib/ruby/1.8/net/telnet.rb:352:in `initialize': Connection refused - connect(2) (Errno::ECONNREFUSED)
from /usr/lib/ruby/1.8/net/telnet.rb:352:in `open'
from /usr/lib/ruby/1.8/net/telnet.rb:352:in `initialize'
from /usr/lib/ruby/1.8/timeout.rb:62:in `timeout' 以下略
のようなエラーで、プログラムが止まってしまいます。
もしくは、
/usr/lib/ruby/1.8/net/telnet.rb:557:in `waitfor': timed out while waiting for more data (Timeout::Error)
from /usr/lib/ruby/1.8/net/telnet.rb:742:in `login'
from telnet-test-test01.rb:13
のようなエラーです。(これは恐らくユーザ名とパスワードのミス)

if (telnetに失敗した場合)
 print "telnetできませんでした"
end
のような処理を書くやり方を教えて下さい。

ちなみに Net::Telnet は現在以下のような書き方をしています。
telnet = Net::Telnet.new("Host" => "192.168.1.1") {|c| print c}
telnet.login("username", "password") {|c| print c}

よろしくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/11/25 13:12:42
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:mattn No.1

回答回数104ベストアンサー獲得回数23

ポイント35pt

begin/rescueでエラーハンドリングします。

begin
  telnet = Net::Telnet.new("Host" => "192.168.1.1") {|c| print c}
  telnet.login("username", "password") {|c| print c}
rescue Errno::ECONNREFUSED
  # ここでエラー処理
end
if (telnetに失敗した場合)
 print "telnetできませんでした"
end

としたい場合は上記のbegin/rescueを関数内に収め、rescueでfalseを返す物を作れば良いかと思います。

その他の回答1件)

id:mattn No.1

回答回数104ベストアンサー獲得回数23ここでベストアンサー

ポイント35pt

begin/rescueでエラーハンドリングします。

begin
  telnet = Net::Telnet.new("Host" => "192.168.1.1") {|c| print c}
  telnet.login("username", "password") {|c| print c}
rescue Errno::ECONNREFUSED
  # ここでエラー処理
end
if (telnetに失敗した場合)
 print "telnetできませんでした"
end

としたい場合は上記のbegin/rescueを関数内に収め、rescueでfalseを返す物を作れば良いかと思います。

id:JULY No.2

回答回数966ベストアンサー獲得回数247

ポイント35pt

逆引きRuby - 例外

例外処理で書くのが普通かな。

begin
    telnet = Net::Telnet.new("Host" => "192.168.1.1") {|c| print c}
    telnet.login("username", "password") {|c| print c}
rescue
    print "Failed\n"
end
id:RESTfulJapan

ありがとうございます!

大変助かります。

2009/11/25 13:12:21

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません