+ from traceback import format_exception, print_exc
+
+ pager = os.environ.get("PAGER") or 'more'
+
+ # if your pager is 'less', options '-F' and '-R' must be passed to it,
+ # and option '-X' is very much recommended
+ if pager == 'less':
+ less = os.environ.get("LESS") or ''
+ for opt in 'X', 'R', 'F':
+ if opt not in less:
+ less = opt + less
+ os.environ["LESS"] = less
+
+ class BasePager:
+ def write(self, value):
+ self.stdout.write(value)
+
+ if _term_found:
+ def pprint(self, value):
+ pprint(value,
+ stream=ColoredFile(self.stdout,
+ '\033[1;3%sm' % stdout_color))
+
+ def close(self):
+ self.stdout.close()
+
+ try:
+ from subprocess import Popen, PIPE
+ except ImportError:
+ class Pager(BasePager):
+ def __init__(self):
+ self.stdout = os.popen(pager, 'w')
+ else:
+ class Pager(BasePager):
+ def __init__(self):
+ self.pipe = Popen(pager, shell=True, stdin=PIPE,
+ universal_newlines=True)
+ self.stdout = self.pipe.stdin
+
+ def close(self):
+ BasePager.close(self)
+ self.pipe.wait()