blob: 722c5eef7d8622f41b71f48a44141e4523d72738 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001
2:mod:`tempfile` --- Generate temporary files and directories
3============================================================
4
5.. sectionauthor:: Zack Weinberg <zack@codesourcery.com>
6
7
8.. module:: tempfile
9 :synopsis: Generate temporary files and directories.
10
11
12.. index::
13 pair: temporary; file name
14 pair: temporary; file
15
16This module generates temporary files and directories. It works on all
Georg Brandle6bcc912008-05-12 18:05:20 +000017supported platforms. It provides three new functions,
18:func:`NamedTemporaryFile`, :func:`mkstemp`, and :func:`mkdtemp`, which should
19eliminate all remaining need to use the insecure :func:`mktemp` function.
20Temporary file names created by this module no longer contain the process ID;
21instead a string of six random characters is used.
Georg Brandl116aa622007-08-15 14:28:22 +000022
Christian Heimes81ee3ef2008-05-04 22:42:01 +000023Also, all the user-callable functions now take additional arguments which
24allow direct control over the location and name of temporary files. It is
25no longer necessary to use the global *tempdir* and *template* variables.
26To maintain backward compatibility, the argument order is somewhat odd; it
27is recommended to use keyword arguments for clarity.
Georg Brandl116aa622007-08-15 14:28:22 +000028
29The module defines the following user-callable functions:
30
31
Christian Heimes81ee3ef2008-05-04 22:42:01 +000032.. function:: TemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]])
Georg Brandl116aa622007-08-15 14:28:22 +000033
Christian Heimes81ee3ef2008-05-04 22:42:01 +000034 Return a file-like object that can be used as a temporary storage area.
35 The file is created using :func:`mkstemp`. It will be destroyed as soon
Georg Brandl116aa622007-08-15 14:28:22 +000036 as it is closed (including an implicit close when the object is garbage
Christian Heimes81ee3ef2008-05-04 22:42:01 +000037 collected). Under Unix, the directory entry for the file is removed
38 immediately after the file is created. Other platforms do not support
39 this; your code should not rely on a temporary file created using this
40 function having or not having a visible name in the file system.
Georg Brandl116aa622007-08-15 14:28:22 +000041
Christian Heimes81ee3ef2008-05-04 22:42:01 +000042 The *mode* parameter defaults to ``'w+b'`` so that the file created can
43 be read and written without being closed. Binary mode is used so that it
44 behaves consistently on all platforms without regard for the data that is
45 stored. *bufsize* defaults to ``-1``, meaning that the operating system
46 default is used.
Georg Brandl116aa622007-08-15 14:28:22 +000047
48 The *dir*, *prefix* and *suffix* parameters are passed to :func:`mkstemp`.
49
Christian Heimes7f044312008-01-06 17:05:40 +000050 The returned object is a true file object on POSIX platforms. On other
Georg Brandl502d9a52009-07-26 15:02:41 +000051 platforms, it is a file-like object whose :attr:`!file` attribute is the
Christian Heimes81ee3ef2008-05-04 22:42:01 +000052 underlying true file object. This file-like object can be used in a
Christian Heimes3ecfea712008-02-09 20:51:34 +000053 :keyword:`with` statement, just like a normal file.
Christian Heimes7f044312008-01-06 17:05:40 +000054
Georg Brandl116aa622007-08-15 14:28:22 +000055
Christian Heimes81ee3ef2008-05-04 22:42:01 +000056.. function:: NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])
Georg Brandl116aa622007-08-15 14:28:22 +000057
Christian Heimes81ee3ef2008-05-04 22:42:01 +000058 This function operates exactly as :func:`TemporaryFile` does, except that
59 the file is guaranteed to have a visible name in the file system (on
60 Unix, the directory entry is not unlinked). That name can be retrieved
61 from the :attr:`name` member of the file object. Whether the name can be
62 used to open the file a second time, while the named temporary file is
63 still open, varies across platforms (it can be so used on Unix; it cannot
64 on Windows NT or later). If *delete* is true (the default), the file is
65 deleted as soon as it is closed.
Georg Brandl502d9a52009-07-26 15:02:41 +000066 The returned object is always a file-like object whose :attr:`!file`
Christian Heimes81ee3ef2008-05-04 22:42:01 +000067 attribute is the underlying true file object. This file-like object can
68 be used in a :keyword:`with` statement, just like a normal file.
Georg Brandl116aa622007-08-15 14:28:22 +000069
Georg Brandl116aa622007-08-15 14:28:22 +000070
Christian Heimes81ee3ef2008-05-04 22:42:01 +000071.. function:: SpooledTemporaryFile([max_size=0, [mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]]])
Georg Brandl116aa622007-08-15 14:28:22 +000072
Christian Heimes81ee3ef2008-05-04 22:42:01 +000073 This function operates exactly as :func:`TemporaryFile` does, except that
74 data is spooled in memory until the file size exceeds *max_size*, or
75 until the file's :func:`fileno` method is called, at which point the
76 contents are written to disk and operation proceeds as with
77 :func:`TemporaryFile`.
Georg Brandl116aa622007-08-15 14:28:22 +000078
Christian Heimes81ee3ef2008-05-04 22:42:01 +000079 The resulting file has one additional method, :func:`rollover`, which
80 causes the file to roll over to an on-disk file regardless of its size.
Georg Brandl116aa622007-08-15 14:28:22 +000081
Christian Heimes81ee3ef2008-05-04 22:42:01 +000082 The returned object is a file-like object whose :attr:`_file` attribute
83 is either a :class:`StringIO` object or a true file object, depending on
84 whether :func:`rollover` has been called. This file-like object can be
85 used in a :keyword:`with` statement, just like a normal file.
86
87
88.. function:: mkstemp([suffix=''[, prefix='tmp'[, dir=None[, text=False]]]])
89
90 Creates a temporary file in the most secure manner possible. There are
91 no race conditions in the file's creation, assuming that the platform
92 properly implements the :const:`os.O_EXCL` flag for :func:`os.open`. The
93 file is readable and writable only by the creating user ID. If the
94 platform uses permission bits to indicate whether a file is executable,
95 the file is executable by no one. The file descriptor is not inherited
96 by child processes.
97
98 Unlike :func:`TemporaryFile`, the user of :func:`mkstemp` is responsible
99 for deleting the temporary file when done with it.
100
101 If *suffix* is specified, the file name will end with that suffix,
102 otherwise there will be no suffix. :func:`mkstemp` does not put a dot
103 between the file name and the suffix; if you need one, put it at the
104 beginning of *suffix*.
105
106 If *prefix* is specified, the file name will begin with that prefix;
107 otherwise, a default prefix is used.
108
109 If *dir* is specified, the file will be created in that directory;
110 otherwise, a default directory is used. The default directory is chosen
111 from a platform-dependent list, but the user of the application can
112 control the directory location by setting the *TMPDIR*, *TEMP* or *TMP*
113 environment variables. There is thus no guarantee that the generated
114 filename will have any nice properties, such as not requiring quoting
115 when passed to external commands via ``os.popen()``.
116
117 If *text* is specified, it indicates whether to open the file in binary
118 mode (the default) or text mode. On some platforms, this makes no
119 difference.
120
121 :func:`mkstemp` returns a tuple containing an OS-level handle to an open
122 file (as would be returned by :func:`os.open`) and the absolute pathname
123 of that file, in that order.
124
125
126.. function:: mkdtemp([suffix=''[, prefix='tmp'[, dir=None]]])
127
128 Creates a temporary directory in the most secure manner possible. There
129 are no race conditions in the directory's creation. The directory is
130 readable, writable, and searchable only by the creating user ID.
131
132 The user of :func:`mkdtemp` is responsible for deleting the temporary
133 directory and its contents when done with it.
134
135 The *prefix*, *suffix*, and *dir* arguments are the same as for
136 :func:`mkstemp`.
Georg Brandl116aa622007-08-15 14:28:22 +0000137
138 :func:`mkdtemp` returns the absolute pathname of the new directory.
139
Georg Brandl116aa622007-08-15 14:28:22 +0000140
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000141.. function:: mktemp([suffix=''[, prefix='tmp'[, dir=None]]])
Georg Brandl116aa622007-08-15 14:28:22 +0000142
143 .. deprecated:: 2.3
144 Use :func:`mkstemp` instead.
145
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000146 Return an absolute pathname of a file that did not exist at the time the
147 call is made. The *prefix*, *suffix*, and *dir* arguments are the same
148 as for :func:`mkstemp`.
Georg Brandl116aa622007-08-15 14:28:22 +0000149
150 .. warning::
151
Georg Brandl36ab1ef2009-01-03 21:17:04 +0000152 Use of this function may introduce a security hole in your program. By
153 the time you get around to doing anything with the file name it returns,
154 someone else may have beaten you to the punch. :func:`mktemp` usage can
155 be replaced easily with :func:`NamedTemporaryFile`, passing it the
156 ``delete=False`` parameter::
Alexandre Vassalotti6461e102008-05-15 22:09:29 +0000157
158 >>> f = NamedTemporaryFile(delete=False)
Alexandre Vassalotti6461e102008-05-15 22:09:29 +0000159 >>> f
160 <open file '<fdopen>', mode 'w+b' at 0x384698>
161 >>> f.name
162 '/var/folders/5q/5qTPn6xq2RaWqk+1Ytw3-U+++TI/-Tmp-/tmpG7V1Y0'
163 >>> f.write("Hello World!\n")
164 >>> f.close()
165 >>> os.unlink(f.name)
166 >>> os.path.exists(f.name)
167 False
Georg Brandl116aa622007-08-15 14:28:22 +0000168
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000169The module uses two global variables that tell it how to construct a
170temporary name. They are initialized at the first call to any of the
171functions above. The caller may change them, but this is discouraged; use
172the appropriate function arguments, instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000173
174
175.. data:: tempdir
176
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000177 When set to a value other than ``None``, this variable defines the
178 default value for the *dir* argument to all the functions defined in this
179 module.
Georg Brandl116aa622007-08-15 14:28:22 +0000180
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000181 If ``tempdir`` is unset or ``None`` at any call to any of the above
182 functions, Python searches a standard list of directories and sets
183 *tempdir* to the first one which the calling user can create files in.
184 The list is:
Georg Brandl116aa622007-08-15 14:28:22 +0000185
186 #. The directory named by the :envvar:`TMPDIR` environment variable.
187
188 #. The directory named by the :envvar:`TEMP` environment variable.
189
190 #. The directory named by the :envvar:`TMP` environment variable.
191
192 #. A platform-specific location:
193
Georg Brandl116aa622007-08-15 14:28:22 +0000194 * On Windows, the directories :file:`C:\\TEMP`, :file:`C:\\TMP`,
195 :file:`\\TEMP`, and :file:`\\TMP`, in that order.
196
197 * On all other platforms, the directories :file:`/tmp`, :file:`/var/tmp`, and
198 :file:`/usr/tmp`, in that order.
199
200 #. As a last resort, the current working directory.
201
202
203.. function:: gettempdir()
204
205 Return the directory currently selected to create temporary files in. If
206 :data:`tempdir` is not ``None``, this simply returns its contents; otherwise,
207 the search described above is performed, and the result returned.
208
209
Georg Brandl116aa622007-08-15 14:28:22 +0000210.. function:: gettempprefix()
211
212 Return the filename prefix used to create temporary files. This does not
Georg Brandl4b26ff82008-08-04 07:24:52 +0000213 contain the directory component.
Georg Brandl116aa622007-08-15 14:28:22 +0000214