Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r94805:6ee028a07651 Date: 2018-07-05 17:01 +0200 http://bitbucket.org/pypy/pypy/changeset/6ee028a07651/
Log: Issue #2837 Write an end-of-line and flush stdout when an exception is about to be printed in code.py. Needed to emulate CPython's interactive command line behaviour more closely, and good to avoid strange effects. diff --git a/lib-python/2.7/code.py b/lib-python/2.7/code.py --- a/lib-python/2.7/code.py +++ b/lib-python/2.7/code.py @@ -104,6 +104,12 @@ except SystemExit: raise except: + if softspace(sys.stdout, 0): + print + try: + sys.stdout.flush() + except: + pass self.showtraceback() else: if softspace(sys.stdout, 0): diff --git a/pypy/module/test_lib_pypy/test_code_extra.py b/pypy/module/test_lib_pypy/test_code_extra.py new file mode 100644 --- /dev/null +++ b/pypy/module/test_lib_pypy/test_code_extra.py @@ -0,0 +1,19 @@ +import py +import sys +import cStringIO +import code + + +def test_flush_stdout_on_error(): + runner = code.InteractiveInterpreter() + old_stdout = sys.stdout + try: + mystdout = cStringIO.StringIO() + sys.stdout = mystdout + runner.runcode(compile("print 5,;0/0", "<interactive>", "exec")) + finally: + sys.stdout = old_stdout + + if '__pypy__' not in sys.builtin_module_names: + py.test.skip('pypy only test') + assert mystdout.getvalue() == "5\n" _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit