blob: c1413898b52013a73cb8aa4b0f2711be0b402e37 [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
Guido van Rossum4033ad71996-08-08 18:33:56 +000021 if tempdir is not None:
22 return tempdir
Guido van Rossumf4aaf861996-05-28 23:31:34 +000023 attempdirs = ['/usr/tmp', '/tmp', os.getcwd(), os.curdir]
24 if os.environ.has_key('TMPDIR'):
25 attempdirs.insert(0, os.environ['TMPDIR'])
26 testfile = gettempprefix() + '-*-writetest-*-'
27 for dir in attempdirs:
28 try:
29 filename = os.path.join(dir, testfile)
30 fp = open(filename, 'w')
31 fp.write('blat')
32 fp.close()
33 os.unlink(filename)
34 tempdir = dir
35 break
36 except IOError:
37 pass
38 if tempdir is None:
39 msg = "Can't find a usable temporary directory amongst " + `attempdirs`
40 raise IOError, msg
41 return tempdir
Guido van Rossum41f95031992-03-31 19:02:01 +000042
43
44# Function to calculate a prefix of the filename to use
45
46def gettempprefix():
47 global template
48 if template == None:
49 if os.name == 'posix':
50 template = '@' + `os.getpid()` + '.'
51 else:
52 template = 'tmp' # XXX might choose a better one
53 return template
Guido van Rossumcff34541992-01-14 18:31:56 +000054
Guido van Rossumeee94981991-11-12 15:38:08 +000055
Guido van Rossum4a3a41f1991-12-26 13:10:50 +000056# Counter for generating unique names
Guido van Rossumeee94981991-11-12 15:38:08 +000057
Guido van Rossum4a3a41f1991-12-26 13:10:50 +000058counter = 0
Guido van Rossumeee94981991-11-12 15:38:08 +000059
60
Guido van Rossum41f95031992-03-31 19:02:01 +000061# User-callable function to return a unique temporary file name
Guido van Rossumeee94981991-11-12 15:38:08 +000062
63def mktemp():
Guido van Rossum4a3a41f1991-12-26 13:10:50 +000064 global counter
Guido van Rossum41f95031992-03-31 19:02:01 +000065 dir = gettempdir()
66 pre = gettempprefix()
Guido van Rossumeee94981991-11-12 15:38:08 +000067 while 1:
Guido van Rossum41f95031992-03-31 19:02:01 +000068 counter = counter + 1
69 file = os.path.join(dir, pre + `counter`)
70 if not os.path.exists(file):
71 return file