2011-01-04 7 views
11

다른 외부 명령 행 호출의 실행 시간을 평가하기위한 Ruby 1.9.2 스크립트를 작성 중입니다. 명령 행 호출 시간 측정하기

내가 명령 행 호출을 실행하기 위해 루비 Process.system 방법을 사용하여 다음과 같이 실행 시간을 캡처하려고 :
start = Time.now 
system("./script1", "argX") 

puts "Duration: #{Time.now - start} seconds" 

가 지금은 기간이 실행 ​​시간을 반영하지 않는다는 문제가

외부 프로세스의 "시스템"호출 실행 시간.

어떻게하면 외부 프로세스의 실행 시간을 측정 할 수 있습니까?

답변

2

제대로 이해하면 스크립트를 실행하는 Ruby 프로세스의 시간을 맞추고 싶습니다. * nix 시스템에서 작업 할 때는 time 유틸리티를 사용할 수 있습니다. 그런 다음 다음을 수행 할 수 있습니다. time ruby *yourscript*

+0

도 rvm을 실행하는 Mac에서 작동합니다. –

+0

macs는 * nix 시스템입니다. haha ​​ – Jay

12

좋아요. 내가하려는 일을 이해한다면 "./script1"호출이 실행되는 데 걸리는 시간을 측정하려고합니다.

당신이하고자하는 일은 benchmark 라이브러리를 사용하는 것입니다 (표준).

require 'benchmark' 

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

그러면 원하는 시간 일 수있는 사용자 및 시스템 시간으로 보고서가 생성됩니다.

+0

이 방법으로 벤치 마크 라이브러리를 사용하는 것은 시스템 명령을 실행하는 데 걸리는 시간을 포함합니다. – nan

3

당신은 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']}" 

time이 출력 결과를

real 0m0.003s 
user 0m0.001s 
sys 0m0.002s 

같은 형식을 구문 분석 그리고 그것은 에 우리가 사용해야하는 이유입니다 표준 오류을, 그것을 출력 할 수 있습니다 Open3을 가져 와서 (스크립트의 출력과 구별하면, time의 출력과 잘 충돌하지 않을 것입니다).

시간은 경과 된 시간에 대해 "형식화 된"출력을 가지므로 원시 밀리 초 형식으로 변환하려면 구문 분석을해야 할 수도 있습니다.