lib/ztk/command.rb in ztk-0.2.1 vs lib/ztk/command.rb in ztk-0.2.2

- old
+ new

@@ -62,10 +62,18 @@ # @example Execute a command: # # cmd = ZTK::Command.new # puts cmd.exec("hostname -f").inspect def exec(command, options={}) + + def log_header(tag) + count = 8 + sep = ("=" * count) + header = [sep, "[ #{tag} ]", sep, "[ #{self.inspect} ]", sep, "[ #{tag} ]", sep].join + "#{header}\n" + end + options = OpenStruct.new({ :exit_code => 0, :silence => false }.merge(options)) log(:debug) { "options(#{options.inspect})" } log(:debug) { "command(#{command.inspect})" } output = "" @@ -92,11 +100,11 @@ child_stderr_writer.close reader_writer_key = {parent_stdout_reader => :stdout, parent_stderr_reader => :stderr} reader_writer_map = {parent_stdout_reader => @config.stdout, parent_stderr_reader => @config.stderr} - direct_log(:debug) { "===[STARTED]===[STARTED]===[#{self.inspect}]===[STARTED]===[STARTED]===\n" } + direct_log(:debug) { log_header("STARTED") } loop do break if reader_writer_map.keys.all?{ |reader| reader.eof? } sockets = IO.select(reader_writer_map.keys).first sockets.each do |socket| @@ -104,29 +112,30 @@ next if (data.nil? || data.empty?) case reader_writer_key[socket] when :stdout then if !stdout_header - direct_log(:debug) { "===[STDOUT]===[STDOUT]===[#{self.inspect}]===[STDOUT]===[STDOUT]===\n" } + direct_log(:debug) { log_header("STDOUT") } stdout_header = true stderr_header = false end reader_writer_map[socket].write(data) unless options.silence + direct_log(:debug) { data } when :stderr then if !stderr_header - direct_log(:debug) { "===[STDERR]===[STDERR]===[#{self.inspect}]===[STDERR]===[STDERR]===\n" } + direct_log(:warn) { log_header("STDERR") } stderr_header = true stdout_header = false end reader_writer_map[socket].write(data) unless options.silence + direct_log(:warn) { data } end - direct_log(:debug) { data } output += data end end - direct_log(:debug) { "===[FINISHED]===[FINISHED]===[#{self.inspect}]===[FINISHED]===[FINISHED]===\n" } + direct_log(:debug) { log_header("STOPPED") } Process.waitpid(pid) parent_stdout_reader.close parent_stderr_reader.close