Ruby1.9 - システムコマンドの出力を受け取る
rubyのスクリプトの中でOSのコマンドを実行して、その出力を受け取りたいって時はこんな感じでいいんだろうか?execとかsystemだと受け取れないよね?とても自信がない。
たとえばpingを実行して、出力の中からレスポンスタイムを抜き出して返したいみたいな。一応、失敗したらもう一度試みて、それでも駄目なら0を返す感じにしてみた。
#-*- coding: UTF-8 -*- def ping(host, limit = 2) return 0 if limit == 0 cmd = "ping -c 1 #{host}" begin io = IO.popen(cmd) rescue raise else response_time = '' io.read.gsub(/\n/, '').gsub(/^.*time=(.*?)\s.*/){response_time = $1} if response_time.empty? ping(host, limit - 1) else response_time end ensure io.close if io end end ping('192.168.0.1') #=> "0.271"