You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.1 KiB
62 lines
2.1 KiB
""" |
|
The temp module provides a NamedTemporaryFile that can be re-opened on any |
|
platform. Most platforms use the standard Python tempfile.TemporaryFile class, |
|
but MS Windows users are given a custom class. |
|
|
|
This is needed because in Windows NT, the default implementation of |
|
NamedTemporaryFile uses the O_TEMPORARY flag, and thus cannot be reopened [1]. |
|
|
|
1: http://mail.python.org/pipermail/python-list/2005-December/359474.html |
|
""" |
|
|
|
import os |
|
import tempfile |
|
|
|
__all__ = ('NamedTemporaryFile', 'gettempdir',) |
|
|
|
if os.name == 'nt': |
|
class TemporaryFile(object): |
|
""" |
|
Temporary file object constructor that works in Windows and supports |
|
reopening of the temporary file in windows. |
|
""" |
|
def __init__(self, mode='w+b', bufsize=-1, suffix='', prefix='', |
|
dir=None): |
|
fd, name = tempfile.mkstemp(suffix=suffix, prefix=prefix, |
|
dir=dir) |
|
self.name = name |
|
self.file = os.fdopen(fd, mode, bufsize) |
|
self.close_called = False |
|
|
|
# Because close can be called during shutdown |
|
# we need to cache os.unlink and access it |
|
# as self.unlink only |
|
unlink = os.unlink |
|
|
|
def close(self): |
|
if not self.close_called: |
|
self.close_called = True |
|
try: |
|
self.file.close() |
|
except (OSError, IOError): |
|
pass |
|
try: |
|
self.unlink(self.name) |
|
except (OSError): |
|
pass |
|
|
|
def __del__(self): |
|
self.close() |
|
|
|
def read(self, *args): return self.file.read(*args) |
|
def seek(self, offset): return self.file.seek(offset) |
|
def write(self, s): return self.file.write(s) |
|
def __iter__(self): return iter(self.file) |
|
def readlines(self, size=None): return self.file.readlines(size) |
|
def xreadlines(self): return self.file.xreadlines() |
|
|
|
NamedTemporaryFile = TemporaryFile |
|
else: |
|
NamedTemporaryFile = tempfile.NamedTemporaryFile |
|
|
|
gettempdir = tempfile.gettempdir
|
|
|