Module: RVideo::CommandExecutor
- Defined in:
- lib/rvideo/command_executor.rb
Defined Under Namespace
Classes: ProcessHungError
Constant Summary collapse
- STDOUT_TIMEOUT =
200
Class Method Summary collapse
- .execute_tailing_stderr(command, number_of_lines = 500) ⇒ Object
- .execute_with_block(command, line_separator = $/, use_stderr = true) ⇒ Object
Class Method Details
.execute_tailing_stderr(command, number_of_lines = 500) ⇒ Object
82 83 84 85 86 87 88 |
# File 'lib/rvideo/command_executor.rb', line 82 def self.execute_tailing_stderr(command, number_of_lines = 500) result = String.new open4(command) do |pid, i, o, e| open4.spawn "tail -n #{number_of_lines}", :stdin=>e, :stdout=>result, :stdin_timeout => 24*60*60 end result end |
.execute_with_block(command, line_separator = $/, use_stderr = true) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/rvideo/command_executor.rb', line 55 def self.execute_with_block(command, line_separator=$/, use_stderr = true) begin pid, stdin, stdout, stderr = Open4::open4(command) c_pipe = use_stderr ? stderr : stdout pipe_result = '' c_pipe.each_with_timeout(STDOUT_TIMEOUT, line_separator) do |line| yield line pipe_result += line end Process.kill("SIGKILL", pid) Process.waitpid2 pid stdout_result = use_stderr ? stdout.read : pipe_result stderr_result = use_stderr ? pipe_result : stderr.read [stdin, stdout, stderr].each{|io| io.close} return [stderr_result, stdout_result] rescue Timeout::Error => e Process.kill("SIGKILL", pid) Process.waitpid2 pid [stdin, stdout, stderr].each{|io| io.close} raise ProcessHungError end end |