summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1997-08-12 18:00:12 (GMT)
committerGuido van Rossum <guido@python.org>1997-08-12 18:00:12 (GMT)
commitca54982b2af62c7de315ccd6307d16e2f2323cde (patch)
tree168a434d15da2e464fc587c8793f3d0a55a41951 /Lib
parent3fb1aea0ae86dad369f417e5aa1c6c42a22ce238 (diff)
downloadcpython-ca54982b2af62c7de315ccd6307d16e2f2323cde.zip
cpython-ca54982b2af62c7de315ccd6307d16e2f2323cde.tar.gz
cpython-ca54982b2af62c7de315ccd6307d16e2f2323cde.tar.bz2
Added TemporaryFile and wrapper class by Jim Fulton.
Look in more env vars (for NT: TEMP, TMP).
Diffstat (limited to 'Lib')
-rw-r--r--Lib/tempfile.py43
1 files changed, 41 insertions, 2 deletions
diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index 1acd251..652d196 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -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