annotate Lib/tempfile.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 332fe02bf02d
children 0a2c331200f5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
430
0f9ebc63dcb5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # Temporary file name allocation
773
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
2 #
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
3 # XXX This tries to be not UNIX specific, but I don't know beans about
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
4 # how to choose a temp directory or filename on MS-DOS or other
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
5 # systems so it may have to be changed...
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
6
430
0f9ebc63dcb5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
773
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
8 import os
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
9
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
10
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
11 # Parameters that the caller may set to override the defaults
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
12
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
13 tempdir = None
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
14 template = None
430
0f9ebc63dcb5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15
0f9ebc63dcb5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
773
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
17 # Function to calculate the directory to use
430
0f9ebc63dcb5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
773
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
19 def gettempdir():
3647
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
20 global tempdir
3954
9d8a965de7ec Restore 1.3 behavior of gettempdir(): if tempdir is already set, believe it.
Guido van Rossum <guido@python.org>
parents: 3647
diff changeset
21 if tempdir is not None:
9d8a965de7ec Restore 1.3 behavior of gettempdir(): if tempdir is already set, believe it.
Guido van Rossum <guido@python.org>
parents: 3647
diff changeset
22 return tempdir
3647
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
23 attempdirs = ['/usr/tmp', '/tmp', os.getcwd(), os.curdir]
4077
10c084942cf1 Attempt at Windows-NT compatibility.
Guido van Rossum <guido@python.org>
parents: 3954
diff changeset
24 if os.name == 'nt':
10c084942cf1 Attempt at Windows-NT compatibility.
Guido van Rossum <guido@python.org>
parents: 3954
diff changeset
25 attempdirs.insert(0, 'C:\\TEMP')
10c084942cf1 Attempt at Windows-NT compatibility.
Guido van Rossum <guido@python.org>
parents: 3954
diff changeset
26 attempdirs.insert(0, '\\TEMP')
5305
332fe02bf02d (Jack:) Better MacOS support.
Guido van Rossum <guido@python.org>
parents: 4077
diff changeset
27 elif os.name == 'mac':
332fe02bf02d (Jack:) Better MacOS support.
Guido van Rossum <guido@python.org>
parents: 4077
diff changeset
28 import macfs, MACFS
332fe02bf02d (Jack:) Better MacOS support.
Guido van Rossum <guido@python.org>
parents: 4077
diff changeset
29 try:
332fe02bf02d (Jack:) Better MacOS support.
Guido van Rossum <guido@python.org>
parents: 4077
diff changeset
30 refnum, dirid = macfs.FindFolder(MACFS.kOnSystemDisk, MACFS.kTemporaryFolderType, 0)
332fe02bf02d (Jack:) Better MacOS support.
Guido van Rossum <guido@python.org>
parents: 4077
diff changeset
31 dirname = macfs.FSSpec((refnum, dirid, '')).as_pathname()
332fe02bf02d (Jack:) Better MacOS support.
Guido van Rossum <guido@python.org>
parents: 4077
diff changeset
32 attempdirs.insert(0, dirname)
332fe02bf02d (Jack:) Better MacOS support.
Guido van Rossum <guido@python.org>
parents: 4077
diff changeset
33 except macfs.error:
332fe02bf02d (Jack:) Better MacOS support.
Guido van Rossum <guido@python.org>
parents: 4077
diff changeset
34 pass
3647
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
35 if os.environ.has_key('TMPDIR'):
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
36 attempdirs.insert(0, os.environ['TMPDIR'])
4077
10c084942cf1 Attempt at Windows-NT compatibility.
Guido van Rossum <guido@python.org>
parents: 3954
diff changeset
37 testfile = gettempprefix() + 'test'
3647
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
38 for dir in attempdirs:
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
39 try:
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
40 filename = os.path.join(dir, testfile)
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
41 fp = open(filename, 'w')
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
42 fp.write('blat')
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
43 fp.close()
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
44 os.unlink(filename)
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
45 tempdir = dir
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
46 break
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
47 except IOError:
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
48 pass
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
49 if tempdir is None:
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
50 msg = "Can't find a usable temporary directory amongst " + `attempdirs`
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
51 raise IOError, msg
16ca8f0f3f11 Be more careful about default temp dir
Guido van Rossum <guido@python.org>
parents: 773
diff changeset
52 return tempdir
586
dbf408918201 Use $TMPDIR if it is set in the environment.
Guido van Rossum <guido@python.org>
parents: 534
diff changeset
53
773
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
54
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
55 # Function to calculate a prefix of the filename to use
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
56
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
57 def gettempprefix():
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
58 global template
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
59 if template == None:
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
60 if os.name == 'posix':
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
61 template = '@' + `os.getpid()` + '.'
5305
332fe02bf02d (Jack:) Better MacOS support.
Guido van Rossum <guido@python.org>
parents: 4077
diff changeset
62 elif os.name == 'mac':
332fe02bf02d (Jack:) Better MacOS support.
Guido van Rossum <guido@python.org>
parents: 4077
diff changeset
63 template = 'Python-Tmp-'
773
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
64 else:
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
65 template = 'tmp' # XXX might choose a better one
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
66 return template
586
dbf408918201 Use $TMPDIR if it is set in the environment.
Guido van Rossum <guido@python.org>
parents: 534
diff changeset
67
430
0f9ebc63dcb5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68
534
96b2128f00ae Use 'global' instead of struct kludge.
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
69 # Counter for generating unique names
430
0f9ebc63dcb5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70
534
96b2128f00ae Use 'global' instead of struct kludge.
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
71 counter = 0
430
0f9ebc63dcb5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72
0f9ebc63dcb5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
73
773
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
74 # User-callable function to return a unique temporary file name
430
0f9ebc63dcb5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75
0f9ebc63dcb5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 def mktemp():
534
96b2128f00ae Use 'global' instead of struct kludge.
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
77 global counter
773
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
78 dir = gettempdir()
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
79 pre = gettempprefix()
430
0f9ebc63dcb5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 while 1:
773
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
81 counter = counter + 1
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
82 file = os.path.join(dir, pre + `counter`)
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
83 if not os.path.exists(file):
c721afab0efa Mostly rewritten to be more flexible and more portable
Guido van Rossum <guido@python.org>
parents: 586
diff changeset
84 return file