github.com/iron-io/functions@v0.0.0-20180820112432-d59d7d1c40b2/clients/utils.rb (about) 1 require 'open3' 2 3 class ExecError < StandardError 4 attr_accessor :exit_status, :last_line 5 6 def initialize(exit_status, last_line) 7 super("Error on cmd. #{exit_status}") 8 self.exit_status = exit_status 9 self.last_line = last_line 10 end 11 end 12 13 def stream_exec(cmd) 14 puts "Executing cmd: #{cmd}" 15 exit_status = nil 16 last_line = "" 17 Open3.popen2e(cmd) do |stdin, stdout_stderr, wait_thread| 18 Thread.new do 19 stdout_stderr.each {|l| 20 puts l 21 # Save last line for error checking 22 last_line = l 23 } 24 end 25 26 # stdin.puts 'ls' 27 # stdin.close 28 29 exit_status = wait_thread.value 30 raise ExecError.new(exit_status, last_line) if exit_status.exitstatus != 0 31 end 32 return exit_status 33 end 34 35 def exec(cmd) 36 puts "Executing: #{cmd}" 37 puts `#{cmd}` 38 end