Hello, It seems that the new I/O system closes the 3 standard descriptors (stdin, stdout and stderr) when the sys module is unloaded.
I don't know if it is a good thing on Unix, but on Windows at least, python crashes on exit, when call_ll_exitfuncs calls fflush(stdout) and fflush(stderr). As a quick correction, I changed a test in _fileio.c::internal_close(): Index: Modules/_fileio.c =========================================== --- Modules/_fileio.c (revision 57506) +++ Modules/_fileio.c (working copy) @@ -45,7 +45,7 @@ internal_close(PyFileIOObject *self) { int save_errno = 0; - if (self->fd >= 0) { + if (self->fd >= 3) { int fd = self->fd; self->fd = -1; Py_BEGIN_ALLOW_THREADS OTOH, documentation of io.open() says """ (*) If a file descriptor is given, it is closed when the returned I/O object is closed. If you don't want this to happen, use os.dup() to create a duplicate file descriptor. """ So a more correct change would be to dup the three sys.stdout, sys.stdin, sys.stderr, in site.py: installnewio() (BTW, the -S option is broken. You guess why) What are the consequences of a dup() on the standard descriptors? I don't like the idea of sys.stdout.fileno() to be different than 1. I know some code using the numbers 0,1,2 to refer to the standard files. Or we could change the behaviour to "If a file descriptor is given, it won't be closed". You opened it, you close it. What do you think? -- Amaury Forgeot d'Arc _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com