eryk sun wrote:
> On Thu, Sep 22, 2016 at 12:40 PM, Gregory Ewing > <greg.ew...@canterbury.ac.nz> wrote: >> eryk sun wrote: >>> >>> Actually in a Unix terminal the cursor can also be at >>> the end of a line, but a bug in Python requires pressing Ctrl+D >>> twice in that case. >> >> I wouldn't call that a bug, rather it's a consequence of >> what Ctrl-D does. It doesn't really mean EOF, it means to >> send whatever the terminal driver has in its input buffer. >> If the buffer is empty at the time, the process gets a >> zero-length read which is taken as EOF. But if the buffer >> is not empty, it just gets whatever is in the buffer. >> >> There's nothing Python can do about that, because it >> never sees the Ctrl-D -- that's handled entirely by the >> terminal driver. > > Yes, FileIO.readall continues making read() system calls until it sees > an empty read. But if we know we're reading from a terminal, we should > be able to assume that a read either consumes an entire line up to a > newline character or the entire buffer, no? In other words, if we see > a read that returns less than the buffer size but doesn't end on a > newline, then for a terminal, and only a terminal, I think we can > infer Ctrl+D was typed and handle it as EOF. read() changes it behavior intelligently according to the file type (pipe, fifo, etc). By default, from a terminal, it reads up to the first newline - canonical mode/cooked mode vs non-canonical mode (vi/less). Maybe python interpreter is doing the read in non-canonical mode? -- https://mail.python.org/mailman/listinfo/python-list