[Python-ideas] A better interactive prompt

eryk sun eryksun at gmail.com
Wed Oct 26 22:21:38 EDT 2016


On Wed, Oct 26, 2016 at 10:16 PM, Cody Piersall <cody.piersall at gmail.com> wrote:
> Isn't that check really just an isatty() check?  Or is that not
> reliable enough for some reason?

It's not reliable in Windows. There are no tty devices, so the C
runtime's implementation of isatty() instead returns true for
character devices, which includes the console as well as the NUL
device and communication ports. For example:

    C:\>python -c "import sys; print(sys.stdin.isatty())" < nul
    True

`python < nul` starts the REPL, but it immediately closes because
there's nothing to read. On the other hand, reading from COM3 on my
current system blocks, and the only way to exit the REPL is to kill
the process, such as via Ctrl+Break:

    C:\>python < com3
    Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55)
    [MSC v.1900 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> ^C

The way to check for a console input or screen buffer is by calling
GetConsoleMode on the handle.


More information about the Python-ideas mailing list