New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
os.pipe() should return a structsequence (or namedtuple.) #68724
Comments
As discussed on python-ideas, os.pipe should return a structsequence instead of a plain tuple. To be decided is the naming for the read and write end.
|
Another good option is read/write without the 'fd' suffix. Either works, I'd prefer the shorter one but by a small margin. |
'read'/'write' is sufficient. +1 for the proposal. |
Niki Spahiev made a valid argument saying that the following code is common: if not hasattr(src, 'read'): src = open(src) This will break if we name it 'read'/'write' like the methods of a file object. |
+1 for readfd/writefd. I think 'fd' suffix is necessary to make it explicit that those aren't file objects. |
Here's a patch, please review. |
Nowhere else in the stdlib is 'readfd' defined, and 'writefd' is only used once in a test. I think tacking on the 'fd' is both too low level as well as misleading since these are not file descriptors. If there is no agreement on read/write (understandable since those are usually methods), then perhaps input/output? |
Okay, scratch the "not file descriptors" part of my comment, but the rest still stands. |
As for Niki's example: --> src = os.pipe()
--> src
(3, 4)
--> if not hasattr(src, 'read'): src = open(src)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: invalid file: (3, 4) This fails now. If they pass a pipe tuple into the new code they'll just get a different error somewhere else, which seems fine to me. |
The original Python-ideas thread: <https://www.marc.info/?t=143558954500004\> If you want shorter field names, how about just r and w (as they are currently documented)? os.write(our_pipe.w, b"data")
os.read(our_pipe.r, 1024) “Input” and “output” would also work for me (though I am also happy with read, read_fd, etc). However it does seem a bit novel; in my experience people tend to say pipes have read and write ends, not inputs and outputs. os.write(our_pipe.input, b"data")
os.read(our_pipe.output, 1024) |
In C programming common names for both ends are reader and writer. We could go with the pipes analogy and call the ends inlet and outlet. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: