On Sun, Jan 24, 2021 at 10:43:54PM -0500, Matt Wozniski wrote:
> 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.

Okay, but I was asking about using open with a filename string. In any 
case, the existence of named pipes answers my question.


[...]
> 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.

Or  followed by the SGC control code in Latin-1. Or ™ in Windows-1252, 
or ¬ô in MacRoman. Etc.


> 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."

In text mode, reads are always buffered:

https://docs.python.org/3/library/functions.html#open

so `f.read(1)` will read as much as needed, so long as it only returns a 
single character.

A typical buffer size is 4096 bytes, or more.

In any case, I believe the intention of this proposal is for *open*, not 
read, to perform the detection.



-- 
Steve
_______________________________________________
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/OCMXGX7RY3EMKBNM6HMF72INK7K7FNVJ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to