New submission from Matt Hillsdon <m...@corefiling.com>: The following example uses make_parser / parse to read a trivial XML document by filename and then attempts to delete the file. On Win32 I can't unlink the file because the parse does not seem to close the file handle.
import os import tempfile from xml.sax import make_parser, ContentHandler (handle, path) = tempfile.mkstemp() os.write(handle, b"<foo/>") os.close(handle) parser = make_parser() parser.parse(path) # This unlink fails on win32. It succeeds if I comment out the call to parse. os.unlink(path) As I provide a filename rather than a file object, I would expect the parse call to both open and close it. I can't see a way to do the clean-up myself. This issue exists in Python 2.7.3 but I could not reproduce it in 3.2.3. Windows cmd transcript: c:\Users\mth>Python2.7.3\python.exe fileleak.py Traceback (most recent call last): File "fileleak.py", line 14, in <module> os.unlink(path) WindowsError: [Error 32] The process cannot access the file because it is being used by another process: 'c:\\d\\tmpvyqg2c' c:\Users\mth>Python3.2.3\python.exe fileleak.py c:\Users\mth> ---------- components: XML messages: 165779 nosy: mth priority: normal severity: normal status: open title: SAX parse (ExpatParser) leaks file handle when given filename input type: resource usage versions: Python 2.7 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue15388> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com