diff options
author | Malcolm Smith <smith@chaquo.com> | 2024-10-25 00:35:41 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-25 00:35:41 (GMT) |
commit | b08570c90eb9fa2e2ee4429909b14240b7a427d4 (patch) | |
tree | 24c4ef1afd0ddeb152c8656da9b7a6d0974050b4 /Lib | |
parent | e68d4b08ff13a06a2c2877f63bf856e6bf3c2e77 (diff) | |
download | cpython-b08570c90eb9fa2e2ee4429909b14240b7a427d4.zip cpython-b08570c90eb9fa2e2ee4429909b14240b7a427d4.tar.gz cpython-b08570c90eb9fa2e2ee4429909b14240b7a427d4.tar.bz2 |
gh-125942: Android: set stdout to `errors="backslashreplace"` (#125943)
Android stdout/err streams now use `backslashreplace` encoding to ensure readability of the Android log.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/_android_support.py | 11 | ||||
-rw-r--r-- | Lib/test/test_android.py | 5 |
2 files changed, 8 insertions, 8 deletions
diff --git a/Lib/_android_support.py b/Lib/_android_support.py index 353b34f..7572745 100644 --- a/Lib/_android_support.py +++ b/Lib/_android_support.py @@ -31,16 +31,19 @@ def init_streams(android_log_write, stdout_prio, stderr_prio): logcat = Logcat(android_log_write) sys.stdout = TextLogStream( - stdout_prio, "python.stdout", sys.stdout.fileno(), - errors=sys.stdout.errors) + stdout_prio, "python.stdout", sys.stdout.fileno()) sys.stderr = TextLogStream( - stderr_prio, "python.stderr", sys.stderr.fileno(), - errors=sys.stderr.errors) + stderr_prio, "python.stderr", sys.stderr.fileno()) class TextLogStream(io.TextIOWrapper): def __init__(self, prio, tag, fileno=None, **kwargs): + # The default is surrogateescape for stdout and backslashreplace for + # stderr, but in the context of an Android log, readability is more + # important than reversibility. kwargs.setdefault("encoding", "UTF-8") + kwargs.setdefault("errors", "backslashreplace") + super().__init__(BinaryLogStream(prio, tag, fileno), **kwargs) self._lock = RLock() self._pending_bytes = [] diff --git a/Lib/test/test_android.py b/Lib/test/test_android.py index 2ef9f10..076190f 100644 --- a/Lib/test/test_android.py +++ b/Lib/test/test_android.py @@ -123,13 +123,10 @@ class TestAndroidOutput(unittest.TestCase): self.assertIs(stream.readable(), False) self.assertEqual(stream.fileno(), fileno) self.assertEqual("UTF-8", stream.encoding) + self.assertEqual("backslashreplace", stream.errors) self.assertIs(stream.line_buffering, True) self.assertIs(stream.write_through, False) - # stderr is backslashreplace by default; stdout is configured - # that way by libregrtest.main. - self.assertEqual("backslashreplace", stream.errors) - def write(s, lines=None, *, write_len=None): if write_len is None: write_len = len(s) |