mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #20599: Force ASCII encoding for stdout in test_cleanup() of test_builtin
On Windows, the codec of sys.stdout is implemented in Python. At exit, the codec may be unloaded before the destructor tries to write something to sys.stdout.
This commit is contained in:
parent
f86b433823
commit
8ebe5324a0
1 changed files with 11 additions and 3 deletions
|
@ -1604,10 +1604,10 @@ class ShutdownTest(unittest.TestCase):
|
|||
|
||||
class C:
|
||||
def __del__(self):
|
||||
print("before", flush=True)
|
||||
print("before")
|
||||
# Check that builtins still exist
|
||||
len(())
|
||||
print("after", flush=True)
|
||||
print("after")
|
||||
|
||||
c = C()
|
||||
# Make this module survive until builtins and sys are cleaned
|
||||
|
@ -1617,7 +1617,15 @@ class ShutdownTest(unittest.TestCase):
|
|||
# through a GC phase.
|
||||
here = sys.modules[__name__]
|
||||
"""
|
||||
rc, out, err = assert_python_ok("-c", code)
|
||||
# Issue #20599: Force ASCII encoding to get a codec implemented in C,
|
||||
# otherwise the codec may be unloaded before C.__del__() is called, and
|
||||
# so print("before") fails because the codec cannot be used to encode
|
||||
# "before" to sys.stdout.encoding. For example, on Windows,
|
||||
# sys.stdout.encoding is the OEM code page and these code pages are
|
||||
# implemented in Python
|
||||
rc, out, err = assert_python_ok("-c", code,
|
||||
PYTHONIOENCODING="ascii",
|
||||
__cleanenv=True)
|
||||
self.assertEqual(["before", "after"], out.decode().splitlines())
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue