+ 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()
+
+ def displayhook(value):
+ if value is not None:
+ builtins._ = value
+ pager = Pager()
+ try:
+ pager.pprint(value)
+ except: # noqa
+ if _term_found:
+ pager.stdout = ColoredFile(pager.stdout, '\033[31m') # red
+ print_exc(file=pager)
+ pager.close()
+
+ sys.displayhook = displayhook
+
+ def excepthook(etype, evalue, etraceback):
+ lines = format_exception(etype, evalue, etraceback)
+ pager = Pager()
+ if _term_found:
+ pager.stdout = ColoredFile(pager.stdout, '\033[31m') # red
+ for line in lines:
+ pager.write(line)
+ pager.close()
+
+ sys.excepthook = excepthook
+
+ # try:
+ # import cgitb
+ # except ImportError:
+ # pass
+ # else:
+ # # cgitb.enable() overrides sys.excepthook
+ # cgitb.enable(format='text')
+
+ # From Thomas Heller:
+ # https://mail.python.org/pipermail/python-list/2001-April/099020.html
+
+ # import pdb
+ #
+ # def info(*args):
+ # pdb.pm()
+ # sys.excepthook = info
+
+ # utilities
+
+ # From: Paul Magwene:
+ # https://mail.python.org/pipermail/python-list/2001-March/086191.html
+ # With a lot of my fixes: