]> granicus.if.org Git - python/commitdiff
Added TemporaryFile and wrapper class by Jim Fulton.
authorGuido van Rossum <guido@python.org>
Tue, 12 Aug 1997 18:00:12 +0000 (18:00 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 12 Aug 1997 18:00:12 +0000 (18:00 +0000)
Look in more env vars (for NT: TEMP, TMP).

Lib/tempfile.py

index 1acd251a55f1c0963d5ce28b908a999be8617ea2..652d1963d3d7f07acd7f5cc426a00b199d2cd5bb 100644 (file)
@@ -32,8 +32,9 @@ def gettempdir():
             attempdirs.insert(0, dirname)
        except macfs.error:
            pass
-    if os.environ.has_key('TMPDIR'):
-       attempdirs.insert(0, os.environ['TMPDIR'])
+    for envname in 'TMPDIR', 'TEMP', 'TMP':
+       if os.environ.has_key(envname):
+           attempdirs.insert(0, os.environ[envname])
     testfile = gettempprefix() + 'test'
     for dir in attempdirs:
        try:
@@ -82,3 +83,41 @@ def mktemp():
                file = os.path.join(dir, pre + `counter`)
                if not os.path.exists(file):
                        return file
+
+
+class TemporaryFileWrapper:
+    """Temporary file wrapper
+
+    This class provides a wrapper around files opened for temporary use.
+    In particular, it seeks to automatically remove the file when it is
+    no longer needed.
+    """
+    def __init__(self, file, path):
+       self.file=file
+       self.path=path
+
+    def close(self):
+       self.file.close()
+       os.unlink(self.path)
+
+    def __del__(self):
+       try: self.close()
+       except: pass
+
+    def __getattr__(self, name):
+       file=self.__dict__['file']
+       a=getattr(file, name)
+       setattr(self, name, a)
+       return a
+
+
+def TemporaryFile(mode='w+b', bufsize=-1):
+    name=mktemp()
+    file=open(name,mode,bufsize)
+    try:
+       os.unlink(name)
+    except os.error:
+       # Non-unix -- can't unlink file that's still open, use wrapper
+       return TemporaryFileWrapper(file, name)
+    else:
+       return file