Module: RightScale::RightPopen::Utilities
- Defined in:
- lib/right_popen/linux/utilities.rb
Constant Summary collapse
- SIGNAL_LOOKUP =
Signal.list.invert
Class Method Summary collapse
- .reason(status) ⇒ Object
- .run(cmd, parameters = {}) ⇒ Object
- .run_collecting_output(cmd, parameters = {}) ⇒ Object (also: spawn)
- .run_with_blocks(cmd, stdin_block, stdout_block, stderr_block, parameters = {}) ⇒ Object
- .run_with_stdin_collecting_output(cmd, input, parameters = {}) ⇒ Object (also: run_input)
Class Method Details
.reason(status) ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/right_popen/linux/utilities.rb', line 34 def reason(status) if status.exitstatus "with exit status #{status.exitstatus}" else "due to SIG#{SIGNAL_LOOKUP[status.termsig]}" end end |
.run(cmd, parameters = {}) ⇒ Object
43 44 45 46 47 48 49 50 |
# File 'lib/right_popen/linux/utilities.rb', line 43 def run(cmd, parameters={}) status, out, err = run_collecting_output(cmd, parameters) unless status.success? raise "Command \"#{cmd}\" failed #{reason(status)}: " + "stdout #{out}, stderr #{err}" end [out, err] end |
.run_collecting_output(cmd, parameters = {}) ⇒ Object Also known as: spawn
70 71 72 73 74 75 76 |
# File 'lib/right_popen/linux/utilities.rb', line 70 def run_collecting_output(cmd, parameters={}) out = StringIO.new err = StringIO.new status = run_with_blocks(cmd, nil, Proc.new {|s| out.write(s)}, Proc.new {|s| err.write(s)}) [status, out.string, err.string] end |
.run_with_blocks(cmd, stdin_block, stdout_block, stderr_block, parameters = {}) ⇒ Object
79 80 81 82 83 84 85 86 87 88 |
# File 'lib/right_popen/linux/utilities.rb', line 79 def run_with_blocks(cmd, stdin_block, stdout_block, stderr_block, parameters={}) process = Process.new(parameters) process.fork(cmd) process.wait_for_exec a = Accumulator.new(process, [process.stdout, process.stderr], [stdout_block, stderr_block], [process.stdin], [stdin_block]) a.run_to_completion process.status[1] end |
.run_with_stdin_collecting_output(cmd, input, parameters = {}) ⇒ Object Also known as: run_input
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/right_popen/linux/utilities.rb', line 52 def run_with_stdin_collecting_output(cmd, input, parameters={}) out = StringIO.new err = StringIO.new first = true status = run_with_blocks(cmd, Proc.new { if (first) first = false input else nil end}, Proc.new {|s| out.write(s)}, Proc.new {|s| err.write(s)}) [status, out.string, err.string] end |