blob: f95920d5a4a5609c3de8776f2e2a76c7f677c2d7 [file] [log] [blame]
Guido van Rossumeee94981991-11-12 15:38:08 +00001# Temporary file name allocation
Guido van Rossum41f95031992-03-31 19:02:01 +00002#
3# XXX This tries to be not UNIX specific, but I don't know beans about
4# how to choose a temp directory or filename on MS-DOS or other
5# systems so it may have to be changed...
Guido van Rossumeee94981991-11-12 15:38:08 +00006
7
Guido van Rossum41f95031992-03-31 19:02:01 +00008import os
Guido van Rossumeee94981991-11-12 15:38:08 +00009
Guido van Rossumeee94981991-11-12 15:38:08 +000010
Guido van Rossum41f95031992-03-31 19:02:01 +000011# Parameters that the caller may set to override the defaults
Guido van Rossumcff34541992-01-14 18:31:56 +000012
Guido van Rossum41f95031992-03-31 19:02:01 +000013tempdir = None
14template = None
15
16
17# Function to calculate the directory to use
18
19def gettempdir():
Guido van Rossumf4aaf861996-05-28 23:31:34 +000020 global tempdir
21 attempdirs = ['/usr/tmp', '/tmp', os.getcwd(), os.curdir]
22 if os.environ.has_key('TMPDIR'):
23 attempdirs.insert(0, os.environ['TMPDIR'])
24 testfile = gettempprefix() + '-*-writetest-*-'
25 for dir in attempdirs:
26 try:
27 filename = os.path.join(dir, testfile)
28 fp = open(filename, 'w')
29 fp.write('blat')
30 fp.close()
31 os.unlink(filename)
32 tempdir = dir
33 break
34 except IOError:
35 pass
36 if tempdir is None:
37 msg = "Can't find a usable temporary directory amongst " + `attempdirs`
38 raise IOError, msg
39 return tempdir
Guido van Rossum41f95031992-03-31 19:02:01 +000040
41
42# Function to calculate a prefix of the filename to use
43
44def gettempprefix():
45 global template
46 if template == None:
47 if os.name == 'posix':
48 template = '@' + `os.getpid()` + '.'
49 else:
50 template = 'tmp' # XXX might choose a better one
51 return template
Guido van Rossumcff34541992-01-14 18:31:56 +000052
Guido van Rossumeee94981991-11-12 15:38:08 +000053
Guido van Rossum4a3a41f1991-12-26 13:10:50 +000054# Counter for generating unique names
Guido van Rossumeee94981991-11-12 15:38:08 +000055
Guido van Rossum4a3a41f1991-12-26 13:10:50 +000056counter = 0
Guido van Rossumeee94981991-11-12 15:38:08 +000057
58
Guido van Rossum41f95031992-03-31 19:02:01 +000059# User-callable function to return a unique temporary file name
Guido van Rossumeee94981991-11-12 15:38:08 +000060
61def mktemp():
Guido van Rossum4a3a41f1991-12-26 13:10:50 +000062 global counter
Guido van Rossum41f95031992-03-31 19:02:01 +000063 dir = gettempdir()
64 pre = gettempprefix()
Guido van Rossumeee94981991-11-12 15:38:08 +000065 while 1:
Guido van Rossum41f95031992-03-31 19:02:01 +000066 counter = counter + 1
67 file = os.path.join(dir, pre + `counter`)
68 if not os.path.exists(file):
69 return file