| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -528,14 +528,13 @@ I/O Base Classes | |||
| 528 | 528 | It inherits from :class:`IOBase`. | |
| 529 | 529 | ||
| 530 | 530 | The main difference with :class:`RawIOBase` is that methods :meth:`read`, | |
| 531 | - :meth:`readinto` and :meth:`write` will try (respectively) to read as much | ||
| 532 | - input as requested or to consume all given output, at the expense of | ||
| 533 | - making perhaps more than one system call. | ||
| 531 | + :meth:`readinto` and :meth:`write` will try (respectively) to read | ||
| 532 | + as much input as requested or to emit all provided data. | ||
| 534 | 533 | ||
| 535 | - In addition, those methods can raise :exc:`BlockingIOError` if the | ||
| 536 | - underlying raw stream is in non-blocking mode and cannot take or give | ||
| 537 | - enough data; unlike their :class:`RawIOBase` counterparts, they will | ||
| 538 | - never return ``None``. | ||
| 534 | + In addition, if the underlying raw stream is in non-blocking mode, when the | ||
| 535 | + system returns would block :meth:`write` will raise :exc:`BlockingIOError` | ||
| 536 | + with :attr:`BlockingIOError.characters_written` and :meth:`read` will return | ||
| 537 | + data read so far or ``None`` if no data is available. | ||
| 539 | 538 | ||
| 540 | 539 | Besides, the :meth:`read` method does not have a default | |
| 541 | 540 | implementation that defers to :meth:`readinto`. | |
@@ -568,29 +567,40 @@ I/O Base Classes | |||
| 568 | 567 | ||
| 569 | 568 | .. method:: read(size=-1, /) | |
| 570 | 569 | ||
| 571 | - Read and return up to *size* bytes. If the argument is omitted, ``None``, | ||
| 572 | - or negative, data is read and returned until EOF is reached. An empty | ||
| 573 | - :class:`bytes` object is returned if the stream is already at EOF. | ||
| 570 | + Read and return up to *size* bytes. If the argument is omitted, ``None``, | ||
| 571 | + or negative read as much as possible. | ||
| 574 | 572 | ||
| 575 | - If the argument is positive, and the underlying raw stream is not | ||
| 576 | - interactive, multiple raw reads may be issued to satisfy the byte count | ||
| 577 | - (unless EOF is reached first). But for interactive raw streams, at most | ||
| 578 | - one raw read will be issued, and a short result does not imply that EOF is | ||
| 579 | - imminent. | ||
| 573 | + Fewer bytes may be returned than requested. An empty :class:`bytes` object | ||
| 574 | + is returned if the stream is already at EOF. More than one read may be | ||
| 575 | + made and calls may be retried if specific errors are encountered, see | ||
| 576 | + :meth:`os.read` and :pep:`475` for more details. Less than size bytes | ||
| 577 | + being returned does not imply that EOF is imminent. | ||
| 580 | 578 | ||
| 581 | - A :exc:`BlockingIOError` is raised if the underlying raw stream is in | ||
| 582 | - non blocking-mode, and has no data available at the moment. | ||
| 579 | + When reading as much as possible the default implementation will use | ||
| 580 | + ``raw.readall`` if available (which should implement | ||
| 581 | + :meth:`RawIOBase.readall`), otherwise will read in a loop until read | ||
| 582 | + returns ``None``, an empty :class:`bytes`, or a non-retryable error. For | ||
| 583 | + most streams this is to EOF, but for non-blocking streams more data may | ||
| 584 | + become available. | ||
| 585 | + | ||
| 586 | + .. note:: | ||
| 587 | + | ||
| 588 | + When the underlying raw stream is non-blocking, implementations may | ||
| 589 | + either raise :exc:`BlockingIOError` or return ``None`` if no data is | ||
| 590 | + available. :mod:`io` implementations return ``None``. | ||
| 583 | 591 | ||
| 584 | 592 | .. method:: read1(size=-1, /) | |
| 585 | 593 | ||
| 586 | - Read and return up to *size* bytes, with at most one call to the | ||
| 587 | - underlying raw stream's :meth:`~RawIOBase.read` (or | ||
| 588 | - :meth:`~RawIOBase.readinto`) method. This can be useful if you are | ||
| 589 | - implementing your own buffering on top of a :class:`BufferedIOBase` | ||
| 590 | - object. | ||
| 594 | + Read and return up to *size* bytes, calling :meth:`~RawIOBase.readinto` | ||
| 595 | + which may retry if :py:const:`~errno.EINTR` is encountered per | ||
| 596 | + :pep:`475`. If *size* is ``-1`` or not provided, the implementation will | ||
| 597 | + choose an arbitrary value for *size*. | ||
| 591 | 598 | ||
| 592 | - If *size* is ``-1`` (the default), an arbitrary number of bytes are | ||
| 593 | - returned (more than zero unless EOF is reached). | ||
| 599 | + .. note:: | ||
| 600 | + | ||
| 601 | + When the underlying raw stream is non-blocking, implementations may | ||
| 602 | + either raise :exc:`BlockingIOError` or return ``None`` if no data is | ||
| 603 | + available. :mod:`io` implementations return ``None``. | ||
| 594 | 604 | ||
| 595 | 605 | .. method:: readinto(b, /) | |
| 596 | 606 | ||
@@ -767,34 +777,21 @@ than raw I/O does. | |||
| 767 | 777 | ||
| 768 | 778 | .. method:: peek(size=0, /) | |
| 769 | 779 | ||
| 770 | - Return bytes from the stream without advancing the position. At most one | ||
| 771 | - single read on the raw stream is done to satisfy the call. The number of | ||
| 772 | - bytes returned may be less or more than requested. | ||
| 780 | + Return bytes from the stream without advancing the position. The number of | ||
| 781 | + bytes returned may be less or more than requested. If the underlying raw | ||
| 782 | + stream is non-blocking and the operation would block, returns empty bytes. | ||
| 773 | 783 | ||
| 774 | 784 | .. method:: read(size=-1, /) | |
| 775 | 785 | ||
| 776 | - Read and return *size* bytes, or if *size* is not given or negative, until | ||
| 777 | - EOF or if the read call would block in non-blocking mode. | ||
| 778 | - | ||
| 779 | - .. note:: | ||
| 780 | - | ||
| 781 | - When the underlying raw stream is non-blocking, a :exc:`BlockingIOError` | ||
| 782 | - may be raised if a read operation cannot be completed immediately. | ||
| 786 | + In :class:`BufferedReader` this is the same as :meth:`io.BufferedIOBase.read` | ||
| 783 | 787 | ||
| 784 | 788 | .. method:: read1(size=-1, /) | |
| 785 | 789 | ||
| 786 | - Read and return up to *size* bytes with only one call on the raw stream. | ||
| 787 | - If at least one byte is buffered, only buffered bytes are returned. | ||
| 788 | - Otherwise, one raw stream read call is made. | ||
| 790 | + In :class:`BufferedReader` this is the same as :meth:`io.BufferedIOBase.read1` | ||
| 789 | 791 | ||
| 790 | 792 | .. versionchanged:: 3.7 | |
| 791 | 793 | The *size* argument is now optional. | |
| 792 | 794 | ||
| 793 | - .. note:: | ||
| 794 | - | ||
| 795 | - When the underlying raw stream is non-blocking, a :exc:`BlockingIOError` | ||
| 796 | - may be raised if a read operation cannot be completed immediately. | ||
| 797 | - | ||
| 798 | 795 | .. class:: BufferedWriter(raw, buffer_size=DEFAULT_BUFFER_SIZE) | |
| 799 | 796 | ||
| 800 | 797 | A buffered binary stream providing higher-level access to a writeable, non | |
@@ -826,8 +823,8 @@ than raw I/O does. | |||
| 826 | 823 | ||
| 827 | 824 | Write the :term:`bytes-like object`, *b*, and return the | |
| 828 | 825 | number of bytes written. When in non-blocking mode, a | |
| 829 | - :exc:`BlockingIOError` is raised if the buffer needs to be written out but | ||
| 830 | - the raw stream blocks. | ||
| 826 | + :exc:`BlockingIOError` with :attr:`BlockingIOError.characters_written` set | ||
| 827 | + is raised if the buffer needs to be written out but the raw stream blocks. | ||
| 831 | 828 | ||
| 832 | 829 | ||
| 833 | 830 | .. class:: BufferedRandom(raw, buffer_size=DEFAULT_BUFFER_SIZE) | |
| Back | FazBrowse Home | New Git URL |
0 commit comments