def watch(ctrl, line): diff_highlight = True sleep = 2.0 num_iterations = False try: sleep = float(line[0]) line.pop(0) except: pass else: try: num_iterations = int(line[0]) line.pop(0) except: pass if "".join(line[0:2]) == "--no-diff": diff_highlight = False line.pop(0) line.pop(0) if not terminal.color_enabled: diff_highlight = False try: real_stdout = sys.stdout sys.stdout = mystdout = StringIO() previous = None count = 1 while True: highlight = False ctrl.execute(line[:]) output = mystdout.getvalue() mystdout.truncate(0) mystdout.seek(0) if previous and diff_highlight: result = [] prev_iterator = CliView.group_output(previous) next_peeked = [] next_iterator = CliView.group_output(output) next_iterator = CliView.peekable(next_peeked, next_iterator) for prev_group in prev_iterator: if '\033' in prev_group: # skip prev escape seq continue for next_group in next_iterator: if '\033' in next_group: # add current escape seq result += next_group continue elif next_group == '\n': if prev_group != '\n': next_peeked.append(next_group) break if highlight: result += terminal.bg_clear() highlight = False elif prev_group == next_group: if highlight: result += terminal.bg_clear() highlight = False else: if not highlight: result += terminal.bg_blue() highlight = True result += next_group if '\n' == prev_group and '\n' != next_group: continue break for next_group in next_iterator: if next_group == ' ' or next_group == '\n': if highlight: result += terminal.bg_clear() highlight = False else: if not highlight: result += terminal.bg_blue() highlight = True result += next_group if highlight: result += terminal.reset() highlight = False result = "".join(result) previous = output else: result = output previous = output ts = time.time() st = datetime.datetime.fromtimestamp(ts).strftime(' %Y-%m-%d %H:%M:%S') command = " ".join(line) print >> real_stdout, "[%s '%s' sleep: %ss iteration: %s"%(st , command , sleep , count), if num_iterations: print >> real_stdout, " of %s"%(num_iterations), print >> real_stdout, "]" print >> real_stdout, result if num_iterations and num_iterations <= count: break count += 1 time.sleep(sleep) except (KeyboardInterrupt, SystemExit): return finally: sys.stdout = real_stdout print ''
def watch(ctrl, line): diff_highlight = True sleep = 2.0 num_iterations = False try: sleep = float(line[0]) line.pop(0) except: pass else: try: num_iterations = int(line[0]) line.pop(0) except: pass if "".join(line[0:2]) == "--no-diff": diff_highlight = False line.pop(0) line.pop(0) if not terminal.color_enabled: diff_highlight = False try: real_stdout = sys.stdout sys.stdout = mystdout = StringIO() previous = None highlight = False count = 1 while True: ctrl.execute(line[:]) output = mystdout.getvalue() mystdout.reset() if previous and diff_highlight: result = [] for (prev_char, cur_char) in itertools.izip(previous, output): if cur_char == prev_char: if highlight: result += terminal.bg_clear() highlight = False result += cur_char else: if not highlight: result += terminal.bg_blue() highlight = True result += cur_char if highlight: result += terminal.reset() result = "".join(result) previous = output else: result = output previous = output ts = time.time() st = datetime.datetime.fromtimestamp(ts).strftime(' %Y-%m-%d %H:%M:%S') command = " ".join(line) print >> real_stdout, "[%s '%s' sleep: %ss iteration: %s"%(st , command , sleep , count), if num_iterations: print >> real_stdout, " of %s"%(num_iterations), print >> real_stdout, "]" print >> real_stdout, result if num_iterations and num_iterations <= count: break count += 1 time.sleep(sleep) except (KeyboardInterrupt, SystemExit): return finally: sys.stdout = real_stdout print ''
def watch(ctrl, line): diff_highlight = True sleep = 2.0 num_iterations = False try: sleep = float(line[0]) line.pop(0) except: pass else: try: num_iterations = int(line[0]) line.pop(0) except: pass if "".join(line[0:2]) == "--no-diff": diff_highlight = False line.pop(0) line.pop(0) if not terminal.color_enabled: diff_highlight = False try: real_stdout = sys.stdout sys.stdout = mystdout = StringIO() previous = None count = 1 while True: highlight = False ctrl.execute(line[:]) output = mystdout.getvalue() mystdout.truncate(0) mystdout.seek(0) if previous and diff_highlight: result = [] prev_iterator = CliView.group_output(previous) next_peeked = [] next_iterator = CliView.group_output(output) next_iterator = CliView.peekable(next_peeked, next_iterator) for prev_group in prev_iterator: if '\033' in prev_group: # skip prev escape seq continue for next_group in next_iterator: if '\033' in next_group: # add current escape seq result += next_group continue elif next_group == '\n': if prev_group != '\n': next_peeked.append(next_group) break if highlight: result += terminal.bg_clear() highlight = False elif prev_group == next_group: if highlight: result += terminal.bg_clear() highlight = False else: if not highlight: result += terminal.bg_blue() highlight = True result += next_group if '\n' == prev_group and '\n' != next_group: continue break for next_group in next_iterator: if next_group == ' ' or next_group == '\n': if highlight: result += terminal.bg_clear() highlight = False else: if not highlight: result += terminal.bg_blue() highlight = True result += next_group if highlight: result += terminal.reset() highlight = False result = "".join(result) previous = output else: result = output previous = output ts = time.time() st = datetime.datetime.fromtimestamp(ts).strftime( ' %Y-%m-%d %H:%M:%S') command = " ".join(line) print >> real_stdout, "[%s '%s' sleep: %ss iteration: %s" % ( st, command, sleep, count), if num_iterations: print >> real_stdout, " of %s" % (num_iterations), print >> real_stdout, "]" print >> real_stdout, result if num_iterations and num_iterations <= count: break count += 1 time.sleep(sleep) except (KeyboardInterrupt, SystemExit): return finally: sys.stdout = real_stdout print ''