# set displayhook and excepthook
from pprint import pprint
+ 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,
except ImportError:
class Pager(BasePager):
def __init__(self):
- self.pipe = Popen(pager, shell=True, stdin=PIPE)
+ 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()
- else:
- class Pager(BasePager):
- def __init__(self):
- self.stdout = os.popen(pager, 'w')
def displayhook(value):
if value is not None:
builtins._ = value
pager = Pager()
- pager.pprint(value)
+ try:
+ pager.pprint(value)
+ except:
+ pager.stdout = ColoredFile(pager.stdout, '\033[31m') # red
+ print_exc(file=pager)
pager.close()
sys.displayhook = displayhook
- from traceback import format_exception
-
def excepthook(etype, evalue, etraceback):
lines = format_exception(etype, evalue, etraceback)
pager = Pager()
+ pager.stdout = ColoredFile(pager.stdout, '\033[31m') # red
for line in lines:
- pager.write(
- '\033[31m' + line.rstrip('\n') + '\033[0m\n') # red, reset
+ pager.write(line)
pager.close()
sys.excepthook = excepthook