我正在编写一个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)
这将生成一个包含用户和系统时间的报告,这可能是您想要的.
您可以使用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脚本的输出发生冲突)。
请注意,时间具有经过时间的“格式化”输出,因此您可能需要进行一些解析才能将其转换为原始毫秒格式。
如果我理解正确的话,您想要计算 Ruby 进程执行脚本的时间。当您在 *nix 系统上工作时,您可以使用该time实用程序。然后您可以执行以下操作:time ruby *yourscript*