Module: Hadupils::Extensions::Runners::Shell
- Defined in:
- lib/hadupils/extensions.rb
Class Method Summary collapse
- .capture_stderr=(value) ⇒ Object
- .capture_stderr? ⇒ Boolean
- .capture_stdout=(value) ⇒ Object
- .capture_stdout? ⇒ Boolean
- .command(*command_list) ⇒ Object
- .silence_stdout=(value) ⇒ Object
- .silence_stdout? ⇒ Boolean
Class Method Details
.capture_stderr=(value) ⇒ Object
69 70 71 |
# File 'lib/hadupils/extensions.rb', line 69 def self.capture_stderr=(value) @capture_stderr = value end |
.capture_stderr? ⇒ Boolean
65 66 67 |
# File 'lib/hadupils/extensions.rb', line 65 def self.capture_stderr? @capture_stderr end |
.capture_stdout=(value) ⇒ Object
77 78 79 |
# File 'lib/hadupils/extensions.rb', line 77 def self.capture_stdout=(value) @capture_stdout = value end |
.capture_stdout? ⇒ Boolean
73 74 75 |
# File 'lib/hadupils/extensions.rb', line 73 def self.capture_stdout? @capture_stdout || Shell.silence_stdout? end |
.command(*command_list) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/hadupils/extensions.rb', line 9 def self.command(*command_list) opts = {} begin if RUBY_VERSION < '1.9' Open3.popen3(*command_list) do |i, o, e| @stdout = o.read @stderr = e.read end @status = $? $stdout.puts @stdout unless @stdout.nil? || @stdout.empty? || Shell.silence_stdout? $stderr.puts @stderr unless @stderr.nil? || @stderr.empty? @stdout = nil unless capture_stdout? @stderr = nil unless capture_stderr? else stdout_rd, stdout_wr = IO.pipe if capture_stdout? stderr_rd, stderr_wr = IO.pipe if capture_stderr? opts[:out] = stdout_wr if capture_stdout? opts[:err] = stderr_wr if capture_stderr? # NOTE: eval prevents Ruby 1.8.7 from throwing a syntax error on Ruby 1.9+ syntax pid = eval 'Process.spawn(*command_list, opts)' @status = :waiting unless pid.nil? Thread.new do Process.wait pid @status = $? end Thread.new do if capture_stdout? stdout_wr.close @stdout = stdout_rd.read stdout_rd.close $stdout.puts @stdout unless @stdout.nil? || @stdout.empty? || Shell.silence_stdout? end end Thread.new do if capture_stderr? stderr_wr.close @stderr = stderr_rd.read stderr_rd.close $stderr.puts @stderr unless @stderr.nil? || @stderr.empty? end end sleep 0.1 while @status == :waiting end [@stdout, @stderr, @status] rescue Errno::ENOENT => e $stderr.puts e [@stdout, @stderr, nil] end end |
.silence_stdout=(value) ⇒ Object
85 86 87 |
# File 'lib/hadupils/extensions.rb', line 85 def self.silence_stdout=(value) @silence_stdout = value end |
.silence_stdout? ⇒ Boolean
81 82 83 |
# File 'lib/hadupils/extensions.rb', line 81 def self.silence_stdout? @silence_stdout end |