diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2011-12-15 15:25:34 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2011-12-15 15:25:34 (GMT) |
commit | 7158e0621280544165494100a0e04202032926bf (patch) | |
tree | 3f4c0e60c552e51b48e4801df4eb721ba57dc6d7 /Doc/library | |
parent | 2e872082f620e2fa96fe37dc6a5c3cb5b55bdcbd (diff) | |
download | cpython-7158e0621280544165494100a0e04202032926bf.zip cpython-7158e0621280544165494100a0e04202032926bf.tar.gz cpython-7158e0621280544165494100a0e04202032926bf.tar.bz2 |
Issue #13597: Improve documentation of standard streams.
Diffstat (limited to 'Doc/library')
-rw-r--r-- | Doc/library/sys.rst | 49 |
1 files changed, 30 insertions, 19 deletions
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index c18dfdb..18f916b 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -934,31 +934,42 @@ always available. stdout stderr - :term:`File objects <file object>` corresponding to the interpreter's standard - input, output and error streams. ``stdin`` is used for all interpreter input - except for scripts but including calls to :func:`input`. ``stdout`` is used - for the output of :func:`print` and :term:`expression` statements and for the - prompts of :func:`input`. The interpreter's own prompts - and (almost all of) its error messages go to ``stderr``. ``stdout`` and - ``stderr`` needn't be built-in file objects: any object is acceptable as long - as it has a :meth:`write` method that takes a string argument. (Changing these - objects doesn't affect the standard I/O streams of processes executed by - :func:`os.popen`, :func:`os.system` or the :func:`exec\*` family of functions in - the :mod:`os` module.) - - The standard streams are in text mode by default. To write or read binary - data to these, use the underlying binary buffer. For example, to write bytes - to :data:`stdout`, use ``sys.stdout.buffer.write(b'abc')``. Using - :meth:`io.TextIOBase.detach` streams can be made binary by default. This + :term:`File objects <file object>` used by the interpreter for standard + input, output and errors: + + * ``stdin`` is used for all interactive input (including calls to + :func:`input`); + * ``stdout`` is used for the output of :func:`print` and :term:`expression` + statements and for the prompts of :func:`input`; + * The interpreter's own prompts and its error messages go to ``stderr``. + + By default, these streams are regular text streams as returned by the + :func:`open` function. Their parameters are chosen as follows: + + * The character encoding is platform-dependent. Under Windows, if the stream + is interactive (that is, if its :meth:`isatty` method returns True), the + console codepage is used, otherwise the ANSI code page. Under other + platforms, the locale encoding is used (see :meth:`locale.getpreferredencoding`). + + Under all platforms though, you can override this value by setting the + :envvar:`PYTHONIOENCODING` environment variable. + + * When interactive, standard streams are line-buffered. Otherwise, they + are block-buffered like regular text files. You can override this + value with the :option:`-u` command-line option. + + To write or read binary data from/to the standard streams, use the + underlying binary :data:`~io.TextIOBase.buffer`. For example, to write + bytes to :data:`stdout`, use ``sys.stdout.buffer.write(b'abc')``. Using + :meth:`io.TextIOBase.detach`, streams can be made binary by default. This function sets :data:`stdin` and :data:`stdout` to binary:: def make_streams_binary(): sys.stdin = sys.stdin.detach() sys.stdout = sys.stdout.detach() - Note that the streams can be replaced with objects (like - :class:`io.StringIO`) that do not support the - :attr:`~io.BufferedIOBase.buffer` attribute or the + Note that the streams may be replaced with objects (like :class:`io.StringIO`) + that do not support the :attr:`~io.BufferedIOBase.buffer` attribute or the :meth:`~io.BufferedIOBase.detach` method and can raise :exc:`AttributeError` or :exc:`io.UnsupportedOperation`. |