• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`tempfile` --- Generate temporary files and directories
2============================================================
3
4.. module:: tempfile
5   :synopsis: Generate temporary files and directories.
6
7.. sectionauthor:: Zack Weinberg <zack@codesourcery.com>
8
9**Source code:** :source:`Lib/tempfile.py`
10
11.. index::
12   pair: temporary; file name
13   pair: temporary; file
14
15--------------
16
17This module creates temporary files and directories.  It works on all
18supported platforms. :class:`TemporaryFile`, :class:`NamedTemporaryFile`,
19:class:`TemporaryDirectory`, and :class:`SpooledTemporaryFile` are high-level
20interfaces which provide automatic cleanup and can be used as
21context managers. :func:`mkstemp` and
22:func:`mkdtemp` are lower-level functions which require manual cleanup.
23
24All the user-callable functions and constructors take additional arguments which
25allow direct control over the location and name of temporary files and
26directories. Files names used by this module include a string of
27random characters which allows those files to be securely created in
28shared temporary directories.
29To maintain backward compatibility, the argument order is somewhat odd; it
30is recommended to use keyword arguments for clarity.
31
32The module defines the following user-callable items:
33
34.. function:: TemporaryFile(mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None)
35
36   Return a :term:`file-like object` that can be used as a temporary storage area.
37   The file is created securely, using the same rules as :func:`mkstemp`. It will be destroyed as soon
38   as it is closed (including an implicit close when the object is garbage
39   collected).  Under Unix, the directory entry for the file is either not created at all or is removed
40   immediately after the file is created.  Other platforms do not support
41   this; your code should not rely on a temporary file created using this
42   function having or not having a visible name in the file system.
43
44   The resulting object can be used as a context manager (see
45   :ref:`tempfile-examples`).  On completion of the context or
46   destruction of the file object the temporary file will be removed
47   from the filesystem.
48
49   The *mode* parameter defaults to ``'w+b'`` so that the file created can
50   be read and written without being closed.  Binary mode is used so that it
51   behaves consistently on all platforms without regard for the data that is
52   stored.  *buffering*, *encoding* and *newline* are interpreted as for
53   :func:`open`.
54
55   The *dir*, *prefix* and *suffix* parameters have the same meaning and
56   defaults as with :func:`mkstemp`.
57
58   The returned object is a true file object on POSIX platforms.  On other
59   platforms, it is a file-like object whose :attr:`!file` attribute is the
60   underlying true file object.
61
62   The :py:data:`os.O_TMPFILE` flag is used if it is available and works
63   (Linux-specific, requires Linux kernel 3.11 or later).
64
65   .. versionchanged:: 3.5
66
67      The :py:data:`os.O_TMPFILE` flag is now used if available.
68
69
70.. function:: NamedTemporaryFile(mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True)
71
72   This function operates exactly as :func:`TemporaryFile` does, except that
73   the file is guaranteed to have a visible name in the file system (on
74   Unix, the directory entry is not unlinked).  That name can be retrieved
75   from the :attr:`name` attribute of the returned
76   file-like object.  Whether the name can be
77   used to open the file a second time, while the named temporary file is
78   still open, varies across platforms (it can be so used on Unix; it cannot
79   on Windows NT or later).  If *delete* is true (the default), the file is
80   deleted as soon as it is closed.
81   The returned object is always a file-like object whose :attr:`!file`
82   attribute is the underlying true file object. This file-like object can
83   be used in a :keyword:`with` statement, just like a normal file.
84
85
86.. function:: SpooledTemporaryFile(max_size=0, mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None)
87
88   This function operates exactly as :func:`TemporaryFile` does, except that
89   data is spooled in memory until the file size exceeds *max_size*, or
90   until the file's :func:`fileno` method is called, at which point the
91   contents are written to disk and operation proceeds as with
92   :func:`TemporaryFile`.
93
94   The resulting file has one additional method, :func:`rollover`, which
95   causes the file to roll over to an on-disk file regardless of its size.
96
97   The returned object is a file-like object whose :attr:`_file` attribute
98   is either an :class:`io.BytesIO` or :class:`io.StringIO` object (depending on
99   whether binary or text *mode* was specified) or a true file
100   object, depending on whether :func:`rollover` has been called.  This
101   file-like object can be used in a :keyword:`with` statement, just like
102   a normal file.
103
104   .. versionchanged:: 3.3
105      the truncate method now accepts a ``size`` argument.
106
107
108.. function:: TemporaryDirectory(suffix=None, prefix=None, dir=None)
109
110   This function securely creates a temporary directory using the same rules as :func:`mkdtemp`.
111   The resulting object can be used as a context manager (see
112   :ref:`tempfile-examples`).  On completion of the context or destruction
113   of the temporary directory object the newly created temporary directory
114   and all its contents are removed from the filesystem.
115
116   The directory name can be retrieved from the :attr:`name` attribute of the
117   returned object.  When the returned object is used as a context manager, the
118   :attr:`name` will be assigned to the target of the :keyword:`!as` clause in
119   the :keyword:`with` statement, if there is one.
120
121   The directory can be explicitly cleaned up by calling the
122   :func:`cleanup` method.
123
124   .. versionadded:: 3.2
125
126
127.. function:: mkstemp(suffix=None, prefix=None, dir=None, text=False)
128
129   Creates a temporary file in the most secure manner possible.  There are
130   no race conditions in the file's creation, assuming that the platform
131   properly implements the :const:`os.O_EXCL` flag for :func:`os.open`.  The
132   file is readable and writable only by the creating user ID.  If the
133   platform uses permission bits to indicate whether a file is executable,
134   the file is executable by no one.  The file descriptor is not inherited
135   by child processes.
136
137   Unlike :func:`TemporaryFile`, the user of :func:`mkstemp` is responsible
138   for deleting the temporary file when done with it.
139
140   If *suffix* is not ``None``, the file name will end with that suffix,
141   otherwise there will be no suffix.  :func:`mkstemp` does not put a dot
142   between the file name and the suffix; if you need one, put it at the
143   beginning of *suffix*.
144
145   If *prefix* is not ``None``, the file name will begin with that prefix;
146   otherwise, a default prefix is used.  The default is the return value of
147   :func:`gettempprefix` or :func:`gettempprefixb`, as appropriate.
148
149   If *dir* is not ``None``, the file will be created in that directory;
150   otherwise, a default directory is used.  The default directory is chosen
151   from a platform-dependent list, but the user of the application can
152   control the directory location by setting the *TMPDIR*, *TEMP* or *TMP*
153   environment variables.  There is thus no guarantee that the generated
154   filename will have any nice properties, such as not requiring quoting
155   when passed to external commands via ``os.popen()``.
156
157   If any of *suffix*, *prefix*, and *dir* are not
158   ``None``, they must be the same type.
159   If they are bytes, the returned name will be bytes instead of str.
160   If you want to force a bytes return value with otherwise default behavior,
161   pass ``suffix=b''``.
162
163   If *text* is specified, it indicates whether to open the file in binary
164   mode (the default) or text mode.  On some platforms, this makes no
165   difference.
166
167   :func:`mkstemp` returns a tuple containing an OS-level handle to an open
168   file (as would be returned by :func:`os.open`) and the absolute pathname
169   of that file, in that order.
170
171   .. versionchanged:: 3.5
172      *suffix*, *prefix*, and *dir* may now be supplied in bytes in order to
173      obtain a bytes return value.  Prior to this, only str was allowed.
174      *suffix* and *prefix* now accept and default to ``None`` to cause
175      an appropriate default value to be used.
176
177
178.. function:: mkdtemp(suffix=None, prefix=None, dir=None)
179
180   Creates a temporary directory in the most secure manner possible. There
181   are no race conditions in the directory's creation.  The directory is
182   readable, writable, and searchable only by the creating user ID.
183
184   The user of :func:`mkdtemp` is responsible for deleting the temporary
185   directory and its contents when done with it.
186
187   The *prefix*, *suffix*, and *dir* arguments are the same as for
188   :func:`mkstemp`.
189
190   :func:`mkdtemp` returns the absolute pathname of the new directory.
191
192   .. versionchanged:: 3.5
193      *suffix*, *prefix*, and *dir* may now be supplied in bytes in order to
194      obtain a bytes return value.  Prior to this, only str was allowed.
195      *suffix* and *prefix* now accept and default to ``None`` to cause
196      an appropriate default value to be used.
197
198
199.. function:: gettempdir()
200
201   Return the name of the directory used for temporary files. This
202   defines the default value for the *dir* argument to all functions
203   in this module.
204
205   Python searches a standard list of directories to find one which
206   the calling user can create files in.  The list is:
207
208   #. The directory named by the :envvar:`TMPDIR` environment variable.
209
210   #. The directory named by the :envvar:`TEMP` environment variable.
211
212   #. The directory named by the :envvar:`TMP` environment variable.
213
214   #. A platform-specific location:
215
216      * On Windows, the directories :file:`C:\\TEMP`, :file:`C:\\TMP`,
217        :file:`\\TEMP`, and :file:`\\TMP`, in that order.
218
219      * On all other platforms, the directories :file:`/tmp`, :file:`/var/tmp`, and
220        :file:`/usr/tmp`, in that order.
221
222   #. As a last resort, the current working directory.
223
224   The result of this search is cached, see the description of
225   :data:`tempdir` below.
226
227.. function:: gettempdirb()
228
229   Same as :func:`gettempdir` but the return value is in bytes.
230
231   .. versionadded:: 3.5
232
233.. function:: gettempprefix()
234
235   Return the filename prefix used to create temporary files.  This does not
236   contain the directory component.
237
238.. function:: gettempprefixb()
239
240   Same as :func:`gettempprefix` but the return value is in bytes.
241
242   .. versionadded:: 3.5
243
244The module uses a global variable to store the name of the directory
245used for temporary files returned by :func:`gettempdir`.  It can be
246set directly to override the selection process, but this is discouraged.
247All functions in this module take a *dir* argument which can be used
248to specify the directory and this is the recommended approach.
249
250.. data:: tempdir
251
252   When set to a value other than ``None``, this variable defines the
253   default value for the *dir* argument to the functions defined in this
254   module.
255
256   If ``tempdir`` is ``None`` (the default) at any call to any of the above
257   functions except :func:`gettempprefix` it is initialized following the
258   algorithm described in :func:`gettempdir`.
259
260.. _tempfile-examples:
261
262Examples
263--------
264
265Here are some examples of typical usage of the :mod:`tempfile` module::
266
267    >>> import tempfile
268
269    # create a temporary file and write some data to it
270    >>> fp = tempfile.TemporaryFile()
271    >>> fp.write(b'Hello world!')
272    # read data from file
273    >>> fp.seek(0)
274    >>> fp.read()
275    b'Hello world!'
276    # close the file, it will be removed
277    >>> fp.close()
278
279    # create a temporary file using a context manager
280    >>> with tempfile.TemporaryFile() as fp:
281    ...     fp.write(b'Hello world!')
282    ...     fp.seek(0)
283    ...     fp.read()
284    b'Hello world!'
285    >>>
286    # file is now closed and removed
287
288    # create a temporary directory using the context manager
289    >>> with tempfile.TemporaryDirectory() as tmpdirname:
290    ...     print('created temporary directory', tmpdirname)
291    >>>
292    # directory and contents have been removed
293
294
295Deprecated functions and variables
296----------------------------------
297
298A historical way to create temporary files was to first generate a
299file name with the :func:`mktemp` function and then create a file
300using this name. Unfortunately this is not secure, because a different
301process may create a file with this name in the time between the call
302to :func:`mktemp` and the subsequent attempt to create the file by the
303first process. The solution is to combine the two steps and create the
304file immediately. This approach is used by :func:`mkstemp` and the
305other functions described above.
306
307.. function:: mktemp(suffix='', prefix='tmp', dir=None)
308
309   .. deprecated:: 2.3
310      Use :func:`mkstemp` instead.
311
312   Return an absolute pathname of a file that did not exist at the time the
313   call is made.  The *prefix*, *suffix*, and *dir* arguments are similar
314   to those of :func:`mkstemp`, except that bytes file names, ``suffix=None``
315   and ``prefix=None`` are not supported.
316
317   .. warning::
318
319      Use of this function may introduce a security hole in your program.  By
320      the time you get around to doing anything with the file name it returns,
321      someone else may have beaten you to the punch.  :func:`mktemp` usage can
322      be replaced easily with :func:`NamedTemporaryFile`, passing it the
323      ``delete=False`` parameter::
324
325         >>> f = NamedTemporaryFile(delete=False)
326         >>> f.name
327         '/tmp/tmptjujjt'
328         >>> f.write(b"Hello World!\n")
329         13
330         >>> f.close()
331         >>> os.unlink(f.name)
332         >>> os.path.exists(f.name)
333         False
334