lib/command.rb in dev_commands-0.0.46 vs lib/command.rb in dev_commands-0.0.47
- old
+ new
@@ -1,10 +1,12 @@
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
@@ -46,63 +48,91 @@
self[k.to_sym]=v
}
end
end
- def execute
-
+ 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
+
pwd=Dir.pwd
- Dir.chdir(self[:directory]) if(self.has_key?(:directory) && File.exists?(self[:directory]))
- self[:directory] = pwd if(self[:directory].length==0)
-
- puts "#{self[:input]} (#{self[:directory]})" if(!self.has_key?(:quiet) || !self[:quiet])
+ self[:directory] = pwd if(!self.has_key?(:directory) || 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
- if self[:input].include?('<%') && self[:input].include?('%>')
- ruby = self[:input].gsub("<%","").gsub("%>","")
- begin
- self[:output]=eval(ruby)
- rescue
- self[:exit_code]=1
- self[:error]="unable to eval(#{ruby})"
- end
+ Dir.chdir(self[:directory]) do
+ if self[:input].include?('<%') && self[:input].include?('%>')
+ ruby = self[:input].gsub("<%","").gsub("%>","")
- self[:elapsed] = timer.elapsed_str
- self[:end_time] = Time.now
- else
- begin
- 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
- end
- end
+ begin
+ self[:output]=eval(ruby)
+ rescue
+ self[:exit_code]=1
+ self[:error]="unable to eval(#{ruby})"
+ end
- Dir.chdir(pwd) if pwd != Dir.pwd
+ 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[:directory],self[:input], self[:timeout], 1)
+ self[:output]=result[0]
+ self[:exit_code]=result[1]
- if(self[:exit_code] != 0)
- if(!self.has_key?(:quiet) || !self[:quiet])
- puts ' '
- puts "exit_code=#{self[:exit_code]}"
- puts ' '
- puts self[:output]
- puts self[:error]
- puts ' '
+ 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
- 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
+ rescue Exception => e
+ self[:elapsed] = timer.elapsed_str
+ self[:end_time] = Time.now
+ self[:error] = "Exception: " + e.to_s
+ self[:exit_code]=1
+ end
+ end
+ end
+
+
+ if(self[:exit_code] != 0)
+ if(!quiet?)
+ puts "exit_code=#{self[:exit_code]}"
+ puts self[:output]
+ puts self[:error]
+ 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
+
end
def self.machine
if !ENV['COMPUTERNAME'].nil?
return ENV['COMPUTERNAME']
\ No newline at end of file