Module: Hadupils::Extensions::Runners::Shell

Defined in:
lib/hadupils/extensions.rb

Class Method Summary collapse

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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (Boolean)


81
82
83
# File 'lib/hadupils/extensions.rb', line 81

def self.silence_stdout?
  @silence_stdout
end