测量命令行调用的执行时间

beh*_*has 11 ruby

我正在编写一个Ruby 1.9.2脚本来评估不同外部命令行调用的执行时间.

我使用ruby Process.system方法执行命令行调用,并尝试捕获执行时间,如下所示:

start = Time.now
system("./script1", "argX")

puts "Duration: #{Time.now - start} seconds"
Run Code Online (Sandbox Code Playgroud)

现在我遇到的问题是持续时间不反映外部进程的执行时间,而是"系统"调用的执行时间.

知道如何衡量外部流程的执行时间吗?

phi*_*dad 12

好的.如果我理解你想要做什么,你想要计算"./script1"调用运行多长时间?

您可能想要做的一件事是使用基准库(它的标准).

require 'benchmark'

Benchmark.bm (7) do |x|
  x.report ("script1:") {system("./script1", "argX")}
end
Run Code Online (Sandbox Code Playgroud)

这将生成一个包含用户和系统时间的报告,这可能是您想要的.


dav*_*000 5

您可以使用time并解析结果

require 'open3'

command = './script1 argX'

stdout,stderr,status = Open3.capture3("time #{command}")

results = {}
stderr.split("\n").each do |line|
  unless line.blank?
    result_type,result = line.split("\t")
    results[result_type] = result
  end
end
puts "Clock time was #{results['real']}"
Run Code Online (Sandbox Code Playgroud)

time输出格式如下

real    0m0.003s
user    0m0.001s
sys 0m0.002s
Run Code Online (Sandbox Code Playgroud)

它将其输出到标准错误,这就是为什么我们需要使用Open3它来获取它(并将其与脚本的输出区分开来,希望不会与time脚本的输出发生冲突)。

请注意,时间具有经过时间的“格式化”输出,因此您可能需要进行一些解析才能将其转换为原始毫秒格式。


Sto*_*bej 2

如果我理解正确的话,您想要计算 Ruby 进程执行脚本的时间。当您在 *nix 系统上工作时,您可以使用该time实用程序。然后您可以执行以下操作:time ruby *yourscript*