Methods

Files

Class/Module Index [+]

Quicksearch

Chef::Mixin::Command::Windows

Public Instance Methods

popen4(cmd, args={}, &b) click to toggle source
# File lib/chef/mixin/command/windows.rb, line 31
def popen4(cmd, args={}, &b)

  # By default, we are waiting before we yield the block.
  args[:waitlast] ||= false

  #XXX :user, :group, :environment support?

  Open3.popen3(cmd) do |stdin,stdout,stderr,cid|
    if b
      if args[:waitlast]
        b[cid, stdin, stdout, stderr]
        # send EOF so that if the child process is reading from STDIN
        # it will actually finish up and exit
        stdin.close_write
      else
        o = StringIO.new
        e = StringIO.new

        stdin.close

        stdout.sync = true
        stderr.sync = true

        line = stdout.gets(nil)
        if line
          o.write(line)
        end
        line = stderr.gets(nil)
        if line
          e.write(line)
        end
        o.rewind
        e.rewind
        b[cid, stdin, o, e]
      end
    else
      [cid, stdin, stdout, stderr]
    end
  end
  $?
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.