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

Reply via email to