Eryk Sun <eryk...@gmail.com> added the comment:

> On Windows Console, sys.stdin.close() does not prevent a second 
> interact call.  This might be considered a bug.

This is a bug in io._WindowsConsoleIO. 

In Python 3, the sys.std* file objects that get created at startup use 
closefd=False:

    >>> sys.stdin.buffer.raw.closefd
    False
    >>> sys.stdout.buffer.raw.closefd
    False
    >>> sys.stderr.buffer.raw.closefd
    False

Since the REPL uses C FILE streams (or in 3.6+ the underlying console file 
handle in Windows), closing sys.stdin does not cause the REPL to exit, and the 
PyOS_ReadLine call in the interactive loop continues to work in both POSIX and 
Windows. 

That said, closing sys.stdin should cause input() to raise ValueError due to 
sys.stdin.fileno() failing (i.e. take the non-tty path) and subsequently 
sys.stdin.readline() failing. A second call to 
code.InteractiveConsole.interact() should thus fail. The issue is that the 
fileno() method of _WindowsConsoleIO isn't raising ValueError like it should 
when the file is closed and closefd is false. I've created issue 34187 with a 
suggested fix.

----------
nosy: +eryksun

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue34115>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to