在ruby轨道上存储ping命令的平均时间

时间:2012-05-03 07:09:05

标签: ruby-on-rails shell networking ping

我已经编写了以下系统命令来ping一个网站,它给了我想要的ICMP响应。

response = system("ping -c1 www.stackoverflow.com")

回复是 -

PING stackoverflow.com (64.34.119.12) 56(84) bytes of data.
64 bytes from stackoverflow.com (64.34.119.12): icmp_req=1 ttl=52 time=336 ms

--- stackoverflow.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 336.699/336.699/336.699/0.000 ms
 => true

现在我想存储上述统计数据的平均时间。所以我按下了下一个系统命令。

response_time = system("ping -c 1 www.pintile.com | tail -1| awk '{print $4}' | cut -d '/' -f 2")

这给了我平均时间,但没有将它存储在response_time变量中。存储在response_time中的Tha值为 true

335.898
 => true 

现在我的问题是如何在response_time变量中存储平均时间?

2 个答案:

答案 0 :(得分:1)

使用curl:

curl -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' -o /dev/null -s http://www.pintile.com

您将获得如下输出:

Lookup time:    0.589
Connect time:   0.603
PreXfer time:   0.603
StartXfer time: 1.425

Total time: 2.073

希望有所帮助。

已编辑:

选中answer

如果用反引号包围命令,则根本不需要(显式地)调用system()。

使用它像:

response_time = `ping -c 1 www.pintile.com | tail -1| awk '{print $4}' | cut -d '/' -f 2`

现在你将获得response_time。 :)

答案 1 :(得分:0)

尝试:

`ping -c1 www.stackoverflow.com` =~ %r[= \d+\.\d+/(\d+\.\d+)]
response_time = $1 and $1.to_f