Module: EventMachine

Defined in:
lib/panoptimon/eventmonkeypatch/popen3.rb

Overview

feed stderr into connection’s receive_stderr()

Defined Under Namespace

Classes: StderrHandler

Class Method Summary collapse

Class Method Details

.popen3b(cmd, handler = nil, *args) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/panoptimon/eventmonkeypatch/popen3.rb', line 15

def self.popen3b(cmd, handler=nil, *args)
  klass = klass_from_handler(Connection, handler, *args)
  raise "no command?" unless cmd.first
  cmd.unshift(cmd.first) # -> execvp

  original_stderr = $stderr.dup

  begin
    rd, wr     = IO.pipe

    $stderr.reopen wr
    s = invoke_popen(cmd)
    $stderr.reopen original_stderr

    connection = klass.new(s, *args)
    EM.attach(rd, StderrHandler, connection)
    @conns[s] = connection
    yield(connection) if block_given?
    connection
  rescue
    $stderr.reopen(original_stderr)
    raise $!
  end
end