non-blocking reads of binary and text streams handle no-data differently
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 77.2k
- Forks
- 35.9k
- PR merge metrics
- PR metrics pending
Description
Bug report
Bug description:
proc = subprocess.Popen(
['bash', '-c', 'sleep 10; echo hello'],
stdout=subprocess.PIPE,
text=True
)
os.set_blocking(proc.stdout.fileno(), False)
print(repr(proc.stdout.read(8192)))
Refer to issue #57531 for discussion on what should happen in general, but I'm filing this to point out that when text=True the output is an empty string (indistinguishable from EOF, which is a problem), and when text=False the result is None (while an empty string is produced only on EOF).
They should probably behave consistently, and also EOF should be distinguishable from no-data-yet; making the binary behaviour preferable.
CPython versions tested on:
3.13
Operating systems tested on:
Linux
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the subprocess.Popen example in this issue and compare non-blocking read results for text=True and text=False on CPython 3.13/Linux. Read issue #57531 for the proposed general behavior; done means no-data-yet and EOF are distinguishable and binary and text streams behave consistently.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- operating-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100