diff options
Diffstat (limited to 'Lib/test/regrtest.py')
-rwxr-xr-x | Lib/test/regrtest.py | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index ec49b95..a4ebff4 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -376,6 +376,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, elif o in ('-j', '--multiprocess'): use_mp = int(a) elif o == '--slaveargs': + replace_stdout() args, kwargs = json.loads(a) try: result = runtest(*args, **kwargs) @@ -514,6 +515,8 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, else: tests = iter(selected) + replace_stdout() + if use_mp: try: from threading import Thread @@ -727,6 +730,14 @@ def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): tests.append(modname) return stdtests + sorted(tests) +def replace_stdout(): + """Set stdout encoder error handler to backslashreplace (as stderr error + handler) to avoid UnicodeEncodeError when printing a traceback""" + stdout = sys.stdout + sys.stdout = open(stdout.fileno(), 'w', + encoding=stdout.encoding, + errors="backslashreplace") + def runtest(test, verbose, quiet, testdir=None, huntrleaks=False, debug=False, use_resources=None): """Run a single test. @@ -939,8 +950,8 @@ def runtest_inner(test, verbose, quiet, print("test", test, "crashed --", str(type) + ":", value) sys.stdout.flush() if verbose or debug: - traceback.print_exc(file=sys.stderr) - sys.stderr.flush() + traceback.print_exc(file=sys.stdout) + sys.stdout.flush() return FAILED, test_time else: if refleak: |