diff -r 603f3d901a21 Doc/library/io.rst --- a/Doc/library/io.rst Tue Sep 09 07:40:04 2014 +1200 +++ b/Doc/library/io.rst Tue Sep 09 07:55:42 2014 +1200 @@ -521,7 +521,9 @@ * a character string or :class:`bytes` object representing the path to the file which will be opened; * an integer representing the number of an existing OS-level file descriptor - to which the resulting :class:`FileIO` object will give access. + to which the resulting :class:`FileIO` object will give access. When the + FileIO object is closed this fd will be closed as well, unless *closefd* + is set to ``False``. The *mode* can be ``'r'``, ``'w'``, ``'x'`` or ``'a'`` for reading (default), writing, exclusive creation or appending. The file will be diff -r 603f3d901a21 Lib/test/test_fileio.py --- a/Lib/test/test_fileio.py Tue Sep 09 07:40:04 2014 +1200 +++ b/Lib/test/test_fileio.py Tue Sep 09 07:55:42 2014 +1200 @@ -112,11 +112,13 @@ self.assertRaises(TypeError, self.f.write, "Hello!") def testRepr(self): - self.assertEqual(repr(self.f), "<_io.FileIO name=%r mode=%r>" - % (self.f.name, self.f.mode)) + self.assertEqual( + repr(self.f), "<_io.FileIO name=%r mode=%r closefd='%d'>" + % (self.f.name, self.f.mode, self.f.closefd)) del self.f.name - self.assertEqual(repr(self.f), "<_io.FileIO fd=%r mode=%r>" - % (self.f.fileno(), self.f.mode)) + self.assertEqual( + repr(self.f), "<_io.FileIO fd=%r mode=%r closefd='%d'>" + % (self.f.fileno(), self.f.mode, self.f.closefd)) self.f.close() self.assertEqual(repr(self.f), "<_io.FileIO [closed]>") diff -r 603f3d901a21 Modules/_io/fileio.c --- a/Modules/_io/fileio.c Tue Sep 09 07:40:04 2014 +1200 +++ b/Modules/_io/fileio.c Tue Sep 09 07:55:42 2014 +1200 @@ -1054,12 +1054,14 @@ PyErr_Clear(); else return NULL; - res = PyUnicode_FromFormat("<_io.FileIO fd=%d mode='%s'>", - self->fd, mode_string(self)); + res = PyUnicode_FromFormat( + "<_io.FileIO fd=%d mode='%s' closefd='%d'>", + self->fd, mode_string(self), self->closefd); } else { - res = PyUnicode_FromFormat("<_io.FileIO name=%R mode='%s'>", - nameobj, mode_string(self)); + res = PyUnicode_FromFormat( + "<_io.FileIO name=%R mode='%s' closefd='%d'>", + nameobj, mode_string(self), self->closefd); Py_DECREF(nameobj); } return res;