class Nanoc::Extra::Piper
@api private
Public Class Methods
new(stdout: $stdout, stderr: $stderr)
click to toggle source
@param [IO] stdout @param [IO] stderr
# File lib/nanoc/extra/piper.rb, line 19 def initialize(stdout: $stdout, stderr: $stderr) @stdout = stdout @stderr = stderr end
Public Instance Methods
run(cmd, input)
click to toggle source
@param [Array<String>] cmd
@param [String, nil] input
# File lib/nanoc/extra/piper.rb, line 27 def run(cmd, input) Open3.popen3(*cmd) do |stdin, stdout, stderr, wait_thr| stdout_thread = Thread.new { @stdout << stdout.read } stderr_thread = Thread.new { @stderr << stderr.read } if input stdin << input end stdin.close stdout_thread.join stderr_thread.join exit_status = wait_thr.value unless exit_status.success? raise Error.new(cmd, exit_status.to_i) end end end