On Sun, Jan 24, 2021 at 9:53 AM <2qdxy4rzwzuui...@potatochowder.com> wrote:

> On 2021-01-25 at 00:29:41 +1100,
> Steven D'Aprano <st...@pearwood.info> wrote:
>
> > On Sat, Jan 23, 2021 at 03:24:12PM +0000, Barry Scott wrote:
> > > First problem I see is that the file may be a pipe and then you will
> block
> > > until you have enough data to do the auto detect.
> >
> > Can you use `open('filename')` to read a pipe?
>
> Yes.  Named pipes are files, at least on POSIX.
>
> And no.  Unnamed pipes are identified by OS-level file descriptors, so
> you can't open them with open('filename'),
>

The `open` function takes either a file path as a string, or a file
descriptor as an integer. So you can use `open` to read an unnamed pipe or
a socket.

> Is blocking a problem in practice? If you try to open a network file,
> > that could block too, if there are network issues. And since you're
> > likely to follow the open with a read, the read is likely to block. So
> > over all I don't think that blocking is an issue.
>
> If open blocks too many bytes, then my application never gets to respond
> unless enough data comes through the pipe.


It's possible to do a `f.read(1)` on a file opened in text mode. If the
first two bytes of the file are 0xC2 0x99, that's either ™ if the file is
UTF-8, or 슙 if the file is UTF-16BE, or 駂 if the file is UTF-16LE. And
`f.read(1)` needs to pick one of those and return it immediately. It can't
wait for more information. The contract of `read` is "Read from underlying
buffer until we have n characters or we hit EOF." A call to `read(1)`
cannot keep blocking after the first character was received to decide what
encoding to decode it as; that would be backwards incompatible, and it
might block forever if the sender only sends one character before waiting
for a response.

~Matt
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/BAUQXIMQP4F6DRFQCLJCDV3NUPCDCWSQ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to