stdout.py 805 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. from __future__ import print_function
  2. import sys
  3. from contextlib import contextmanager
  4. from IPython.utils import io
  5. from .__main__ import set_trace
  6. from .__main__ import post_mortem
  7. def update_stdout():
  8. # setup stdout to ensure output is available with nose
  9. io.stdout = sys.stdout = sys.__stdout__
  10. def sset_trace(frame=None, context=3):
  11. update_stdout()
  12. if frame is None:
  13. frame = sys._getframe().f_back
  14. set_trace(frame, context)
  15. def spost_mortem(tb=None):
  16. update_stdout()
  17. post_mortem(tb)
  18. def spm():
  19. spost_mortem(sys.last_traceback)
  20. @contextmanager
  21. def slaunch_ipdb_on_exception():
  22. try:
  23. yield
  24. except Exception:
  25. e, m, tb = sys.exc_info()
  26. print(m.__repr__(), file=sys.stderr)
  27. spost_mortem(tb)
  28. finally:
  29. pass