抑制来自 Ruby 方法的零响应
Suppress nil response from Ruby method
我的任务是修改现有的 Ruby 脚本,但我的 Ruby 知识充其量只是基础...
我需要添加一种方法来检查服务器的端口是否打开。如果是,脚本应该继续执行它正在执行的操作。如果没有,它应该退出。
我应用了以下方法,取自Ruby - See if a port is open:
def is_port_open?
@host = "localhost"
@port = "8080"
begin
Timeout::timeout(1) do
begin
s = TCPSocket.new(@host, @port)
s.close
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
return "port closed :("
end
end
rescue Timeout::Error
end
return "problem with timeout?"
end
此方法似乎运行良好,除非在端口打开时返回 "nil"。我如何抑制任何输出(除非有错误)?
提前致谢!
是否只需要检查一个条件(端口开放):
require 'timeout'
require 'socket'
def is_port_open? host, port
@host = host || "localhost"
@port = port || "8080"
begin
Timeout::timeout(1) do
begin
s = TCPSocket.new(@host, @port)
s.close
return true # success
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
return false # socket error
end
end
rescue Timeout::Error
end
return false # timeout error
end
is_port_open? 'localhost', 8080
#⇒ true
is_port_open? 'localhost', 11111
#⇒ false
现在由您决定 return 在出现错误等情况下如何处理。请注意,另一种选择是让异常传播给调用者。这个函数会更短一些,但是你需要在调用者中处理异常。
我的任务是修改现有的 Ruby 脚本,但我的 Ruby 知识充其量只是基础... 我需要添加一种方法来检查服务器的端口是否打开。如果是,脚本应该继续执行它正在执行的操作。如果没有,它应该退出。
我应用了以下方法,取自Ruby - See if a port is open:
def is_port_open?
@host = "localhost"
@port = "8080"
begin
Timeout::timeout(1) do
begin
s = TCPSocket.new(@host, @port)
s.close
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
return "port closed :("
end
end
rescue Timeout::Error
end
return "problem with timeout?"
end
此方法似乎运行良好,除非在端口打开时返回 "nil"。我如何抑制任何输出(除非有错误)?
提前致谢!
是否只需要检查一个条件(端口开放):
require 'timeout'
require 'socket'
def is_port_open? host, port
@host = host || "localhost"
@port = port || "8080"
begin
Timeout::timeout(1) do
begin
s = TCPSocket.new(@host, @port)
s.close
return true # success
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
return false # socket error
end
end
rescue Timeout::Error
end
return false # timeout error
end
is_port_open? 'localhost', 8080
#⇒ true
is_port_open? 'localhost', 11111
#⇒ false
现在由您决定 return 在出现错误等情况下如何处理。请注意,另一种选择是让异常传播给调用者。这个函数会更短一些,但是你需要在调用者中处理异常。