我想在我的ruby代碼中ping一個站點,並看到net-ping是一個很好的庫。不幸的是,當我試圖創業板安裝網平,我得到了以下錯誤:ruby ping for 1.9.1
C:>gem install net-ping
ERROR: Error installing net-ping:
win32-open3 requires Ruby version < 1.9.0.
在進一步的研究,我發現,網上平是尚不可用於1.9.x中有沒有人有一個很好的代碼,他們願意分享。
我想在我的ruby代碼中ping一個站點,並看到net-ping是一個很好的庫。不幸的是,當我試圖創業板安裝網平,我得到了以下錯誤:ruby ping for 1.9.1
C:>gem install net-ping
ERROR: Error installing net-ping:
win32-open3 requires Ruby version < 1.9.0.
在進一步的研究,我發現,網上平是尚不可用於1.9.x中有沒有人有一個很好的代碼,他們願意分享。
你總是可以做到這一點,並使用正則表達式解析的結果,或只是檢查退出狀態:
ping_count = 10
server = "www.google.com"
result = `ping -q -C#{ping_count} #{server}`
if ($?.exitstatus == 0) do
puts "Device is up!"
end
平安返回值,你可以對證:
The ping utility returns an exit status of zero if at least one response was heard from the specified host; a status of two if the transmission was successful but no responses were received; or another value (from
<sysexits.h>
) if an error occurred.
只需檢查一下設備是否啓動,然後再運行我的其他代碼即可。另外,試過你的代碼,我如何看到ping的結果? – rahrahruby 2010-08-25 15:33:05
查看編輯答案。 – Mahmoud 2010-08-25 19:36:39
這是我需要使用'''ping -t 1 ipinfodb.com''''''''''有一個工作超時的地方,並找出ipinfodb.com是否在線提示。 Timeout和SystemTimer都不能以某種方式工作,並等待60秒完成錯誤。謝謝! – 2011-05-16 09:34:06
如果通過'網站'你的意思是網站,那麼我不會使用ping。 Ping會告訴你主機是否啓動(除非路由器或防火牆阻止了ICMP),但它不會告訴你網絡服務器或Web應用程序是否正確響應。
如果是這樣的話,我建議從標準庫或任何其他HTTP庫的Net :: HTTP。做到這一點的方法之一是:
def up?(site)
Net::HTTP.new(site).head('/').kind_of? Net::HTTPOK
end
up? 'www.google.com' #=> true
gem "net-ping", :git => 'git://github.com/djberg96/net-ping.git'
# bundle install
使用現在,你可以在1.9.2
使用功能,從用於Windows遵循以下步驟:
download djberg96-net-ping-net-ping-1.5.3-0-g9252076.zip from github.com/djberg96/net-ping
unzip, cd in the folder
gem build net-ping.gemspec
gem install net-ping-1.5.3-universal-mingw32.gem
gem install win32-security
使用它:
require 'net/ping'
p Net::Ping::TCP.new('www.google.com', 'http').ping?
p Net::Ping::TCP.new('foo.bar.baz').ping?
如果你確實需要做ICMP ping,你總是可以使用本地操作系統工具,比如「ping -c 1 host」並解析結果。 – taro 2010-08-25 11:04:14