55 lines
1.3 KiB
Python
55 lines
1.3 KiB
Python
|
# coding: utf-8
|
||
|
"""io-related utilities"""
|
||
|
|
||
|
# Copyright (c) Jupyter Development Team.
|
||
|
# Distributed under the terms of the Modified BSD License.
|
||
|
|
||
|
import codecs
|
||
|
import sys
|
||
|
|
||
|
from ipython_genutils.py3compat import PY3
|
||
|
|
||
|
def unicode_std_stream(stream='stdout'):
|
||
|
u"""Get a wrapper to write unicode to stdout/stderr as UTF-8.
|
||
|
|
||
|
This ignores environment variables and default encodings, to reliably write
|
||
|
unicode to stdout or stderr.
|
||
|
|
||
|
::
|
||
|
|
||
|
unicode_std_stream().write(u'ł@e¶ŧ←')
|
||
|
"""
|
||
|
assert stream in ('stdout', 'stderr')
|
||
|
stream = getattr(sys, stream)
|
||
|
if PY3:
|
||
|
try:
|
||
|
stream_b = stream.buffer
|
||
|
except AttributeError:
|
||
|
# sys.stdout has been replaced - use it directly
|
||
|
return stream
|
||
|
else:
|
||
|
stream_b = stream
|
||
|
|
||
|
return codecs.getwriter('utf-8')(stream_b)
|
||
|
|
||
|
def unicode_stdin_stream():
|
||
|
u"""Get a wrapper to read unicode from stdin as UTF-8.
|
||
|
|
||
|
This ignores environment variables and default encodings, to reliably read unicode from stdin.
|
||
|
|
||
|
::
|
||
|
|
||
|
totreat = unicode_stdin_stream().read()
|
||
|
"""
|
||
|
stream = sys.stdin
|
||
|
if PY3:
|
||
|
try:
|
||
|
stream_b = stream.buffer
|
||
|
except AttributeError:
|
||
|
return stream
|
||
|
else:
|
||
|
stream_b = stream
|
||
|
|
||
|
return codecs.getreader('utf-8')(stream_b)
|
||
|
|