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