lib/command.rb in dev_commands-0.0.41 vs lib/command.rb in dev_commands-0.0.42

- old
+ new

@@ -1,13 +1,30 @@ require 'open3' require_relative('./array.rb') require_relative('./hash.rb') require_relative('./timer.rb') -BUFFER_SIZE=1024 if(!defined?(BUFFER_SIZE)) - - +# = Command +# +# execution of system commands +# +# = Keys +# +# - :input The input of the commands. +# - :timeout The timeout in seconds. +# a value of zero is to infinite timeout. +# defaults to zero +# - :directory The working directory for the command. +# defaults to the current directory +# - :exit_code The exit code of the command +# - :output The output contains the stdout output of the command +# - :error The error contains stderr output of the command +# - :machine The name of the machine the command executed on +# - :user The user name +# - :start_time +# - :end_time +# class Command < Hash def initialize command self[:input] = '' self[:timeout] = 0 @@ -29,27 +46,16 @@ self[k.to_sym]=v } end end - def quiet? - (self.has_key?(:quiet) && self[:quiet]) - end - - def execute value=nil - - if(!value.nil? && value.is_a?(Hash)) - value.each{|k,v|self[k]=v} - end + def execute + puts "#{self[:input]}" if(!self.has_key?(:quiet) || !self[:quiet]) pwd=Dir.pwd Dir.chdir(self[:directory]) if(self.has_key?(:directory) && File.exists?(self[:directory])) self[:directory] = pwd if(self[:directory].length==0) - if(self[:timeout] > 0) - puts "#{self[:input]} (#{self[:directory]}) timeout #{self[:timeout].to_s}" if(!quiet?) - else - puts "#{self[:input]} (#{self[:directory]})" if(!quiet?) - end + self[:machine] = Command.machine self[:user] = Command.user self[:start_time]=Time.now timer=Timer.new @@ -65,31 +71,14 @@ self[:elapsed] = timer.elapsed_str self[:end_time] = Time.now else begin - if(self[:timeout] <= 0) - self[:output],self[:error],status= Open3.capture3(self[:input]) - self[:exit_code]=status.to_i - self[:elapsed] = timer.elapsed_str - self[:end_time] = Time.now - else - require_relative 'timeout.rb' - #puts run_with_timeout(self[:input], self[:timeout], 1).to_s - #self[:output] = run_with_timeout(self[:input], self[:timeout], 1) - result=run_with_timeout(self[:input], self[:timeout], 1) - self[:output]=result[0] - self[:exit_code]=result[1] - - self[:elapsed] = timer.elapsed_str - self[:end_time] = Time.now - - if(timer.elapsed >= self[:timeout]) - self[:exit_code]=1 - self[:error] = self[:error] + "timed out" - end - end + self[:output],self[:error],status= Open3.capture3(self[:input]) + self[:exit_code]=status.to_i + self[:elapsed] = timer.elapsed_str + self[:end_time] = Time.now rescue Exception => e self[:elapsed] = timer.elapsed_str self[:end_time] = Time.now self[:error] = "Exception: " + e.to_s self[:exit_code]=1 @@ -97,13 +86,16 @@ end Dir.chdir(pwd) if pwd != Dir.pwd if(self[:exit_code] != 0) - if(!quiet?) + if(!self.has_key?(:quiet) || !self[:quiet]) + puts ' ' puts "exit_code=#{self[:exit_code]}" + puts ' ' puts self[:output] puts self[:error] + puts ' ' end if(!self.has_key?(:ignore_failure) || !self[:ignore_failure]) raise "#{self[:input]} failed" end #unless (self.has_key?(:ignore_failure) && self[:ignore_failure]==true) end \ No newline at end of file