module OmfCommon::Command

Public Class Methods

execute(*cmd, &block) click to toggle source

Execute a system command and use Open3 to capture exit status, stdout, stderr

@example

OmfCommon::Command.execute("uname -a")
# File lib/omf_common/command.rb, line 14
def self.execute(*cmd, &block)
  result = nil
  begin
    Open3.popen3(*cmd) do |stdin, stdout, stderr, wait_thread|
      case wait_thread.value.exitstatus
      when 0
        # Exit status 0, all good, read stdout
        result = stdout.read.chomp
      when 1
        # Exit status 1, log minor error as warning
        logger.warn stderr.read.chomp
      when 2
        # Exit status 2, log standard error
        logger.error stderr.read.chomp
      else
        # Exit status greater than 2, log fatal error
        logger.fatal stderr.read.chomp
      end
    end
  rescue Errno::ENOENT => e
    logger.fatal e.message
  end
  result
end