Mercurial > public > mercurial-scm > hg-stable
diff mercurial/pycompat.py @ 30481:277f4fe6d01a
py3: provide bytes stdin/out/err through util module
Since standard streams are TextIO on Python 3, we can't use sys.stdin/out/err
directly. Fortunately we can get the underlying BytesIO via .buffer as long as
the streams aren't replaced by e.g. StringIO.
stdin/out/err are provided through util so we can wrap them by platform API.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 20 Oct 2016 23:40:24 +0900 |
parents | 19d8e19fde5b |
children | fc0cfe6c87d7 |
line wrap: on
line diff
--- a/mercurial/pycompat.py Fri Oct 21 00:09:38 2016 +0900 +++ b/mercurial/pycompat.py Thu Oct 20 23:40:24 2016 +0900 @@ -44,6 +44,12 @@ ospathsep = os.pathsep.encode('ascii') ossep = os.sep.encode('ascii') + # TODO: .buffer might not exist if std streams were replaced; we'll need + # a silly wrapper to make a bytes stream backed by a unicode one. + stdin = sys.stdin.buffer + stdout = sys.stdout.buffer + stderr = sys.stderr.buffer + # Since Python 3 converts argv to wchar_t type by Py_DecodeLocale() on Unix, # we can use os.fsencode() to get back bytes argv. # @@ -100,6 +106,9 @@ osname = os.name ospathsep = os.pathsep ossep = os.sep + stdin = sys.stdin + stdout = sys.stdout + stderr = sys.stderr sysargv = sys.argv stringio = io.StringIO