| :mod:`!tempfile` --- Generate temporary files and directories | |
| ============================================================= | |
| .. module:: tempfile | |
| :synopsis: Generate temporary files and directories. | |
| **Source code:** :source:`Lib/tempfile.py` | |
| .. index:: | |
| pair: temporary; file name | |
| pair: temporary; file | |
| -------------- | |
| This module creates temporary files and directories. It works on all | |
| supported platforms. :class:`TemporaryFile`, :class:`NamedTemporaryFile`, | |
| :class:`TemporaryFileWrapper`, :class:`TemporaryDirectory`, and | |
| :class:`SpooledTemporaryFile` are high-level interfaces which provide | |
| automatic cleanup and can be used as :term:`context managers | |
| <context manager>`. :func:`mkstemp` and :func:`mkdtemp` are lower-level | |
| functions which require manual cleanup. | |
| All the user-callable functions and constructors take additional arguments which | |
| allow direct control over the location and name of temporary files and | |
| directories. Files names used by this module include a string of | |
| random characters which allows those files to be securely created in | |
| shared temporary directories. | |
| To maintain backward compatibility, the argument order is somewhat odd; it | |
| is recommended to use keyword arguments for clarity. | |
| The module defines the following user-callable items: | |
| .. function:: TemporaryFile(mode='w+b', buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, *, errors=None) | |
| Return a :term:`file-like object` that can be used as a temporary storage area. | |
| The file is created securely, using the same rules as :func:`mkstemp`. It will be destroyed as soon | |
| as it is closed (including an implicit close when the object is garbage | |
| collected). Under Unix, the directory entry for the file is either not created at all or is removed | |
| immediately after the file is created. Other platforms do not support | |
| this; your code should not rely on a temporary file created using this | |
| function having or not having a visible name in the file system. | |
| The resulting object can be used as a :term:`context manager` (see | |
| :ref:`tempfile-examples`). On completion of the context or | |
| destruction of the file object the temporary file will be removed | |
| from the filesystem. | |
| The *mode* parameter defaults to ``'w+b'`` so that the file created can | |
| be read and written without being closed. Binary mode is used so that it | |
| behaves consistently on all platforms without regard for the data that is | |
| stored. *buffering*, *encoding*, *errors* and *newline* are interpreted as for | |
| :func:`open`. | |
| The *dir*, *prefix* and *suffix* parameters have the same meaning and | |
| defaults as with :func:`mkstemp`. | |
| The returned object is a true file object on POSIX platforms. On other | |
| platforms, it is a file-like object whose :attr:`!file` attribute is the | |
| underlying true file object. | |
| The :py:const:`os.O_TMPFILE` flag is used if it is available and works | |
| (Linux-specific, requires Linux kernel 3.11 or later). | |
| On platforms that are neither Posix nor Cygwin, TemporaryFile is an alias | |
| for NamedTemporaryFile. | |
| .. audit-event:: tempfile.mkstemp fullpath tempfile.TemporaryFile | |
| .. versionchanged:: 3.5 | |
| The :py:const:`os.O_TMPFILE` flag is now used if available. | |
| .. versionchanged:: 3.8 | |
| Added *errors* parameter. | |
| .. function:: NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True, *, errors=None, delete_on_close=True) | |
| This function operates exactly as :func:`TemporaryFile` does, except the | |
| following differences: | |
| * This function returns a file that is guaranteed to have a visible name in | |
| the file system. | |
| * To manage the named file, it extends the parameters of | |
| :func:`TemporaryFile` with *delete* and *delete_on_close* parameters that | |
| determine whether and how the named file should be automatically deleted. | |
| The returned object is always a :class:`TemporaryFileWrapper` instance | |
| (a :term:`file-like object`) whose :attr:`~TemporaryFileWrapper.file` attribute is the underlying | |
| true file object. This file-like object can be used in a :keyword:`with` | |
| statement, just like a normal file. The name of the temporary file can be | |
| retrieved from the :attr:`!name` attribute of the returned file-like object. | |
| On Unix, unlike with the :func:`TemporaryFile`, the directory entry does not | |
| get unlinked immediately after the file creation. | |
| If *delete* is true (the default) and *delete_on_close* is true (the | |
| default), the file is deleted as soon as it is closed. If *delete* is true | |
| and *delete_on_close* is false, the file is deleted on context manager exit | |
| only, or else when the :term:`file-like object` is finalized. Deletion is not | |
| always guaranteed in this case (see :meth:`object.__del__`). If *delete* is | |
| false, the value of *delete_on_close* is ignored. | |
| Therefore to use the name of the temporary file to reopen the file after | |
| closing it, either make sure not to delete the file upon closure (set the | |
| *delete* parameter to be false) or, in case the temporary file is created in | |
| a :keyword:`with` statement, set the *delete_on_close* parameter to be false. | |
| The latter approach is recommended as it provides assistance in automatic | |
| cleaning of the temporary file upon the context manager exit. | |
| Opening the temporary file again by its name while it is still open works as | |
| follows: | |
| * On POSIX the file can always be opened again. | |
| * On Windows, make sure that at least one of the following conditions are | |
| fulfilled: | |
| * *delete* is false | |
| * additional open shares delete access (e.g. by calling :func:`os.open` | |
| with the flag ``O_TEMPORARY``) | |
| * *delete* is true but *delete_on_close* is false. Note, that in this | |
| case the additional opens that do not share delete access (e.g. | |
| created via builtin :func:`open`) must be closed before exiting the | |
| context manager, else the :func:`os.unlink` call on context manager | |
| exit will fail with a :exc:`PermissionError`. | |
| On Windows, if *delete_on_close* is false, and the file is created in a | |
| directory for which the user lacks delete access, then the :func:`os.unlink` | |
| call on exit of the context manager will fail with a :exc:`PermissionError`. | |
| This cannot happen when *delete_on_close* is true because delete access is | |
| requested by the open, which fails immediately if the requested access is not | |
| granted. | |
| On POSIX (only), a process that is terminated abruptly with SIGKILL | |
| cannot automatically delete any NamedTemporaryFiles it created. | |
| .. audit-event:: tempfile.mkstemp fullpath tempfile.NamedTemporaryFile | |
| .. versionchanged:: 3.8 | |
| Added *errors* parameter. | |
| .. versionchanged:: 3.12 | |
| Added *delete_on_close* parameter. | |
| .. class:: TemporaryFileWrapper(file, name, delete=True, delete_on_close=True) | |
| A mutable wrapper returned by :func:`NamedTemporaryFile`. It wraps the | |
| underlying file object, delegating attribute access to it, and ensures | |
| the temporary file is deleted when appropriate. | |
| .. attribute:: file | |
| The underlying :term:`file-like object`. | |
| .. attribute:: name | |
| The file name of the temporary file. | |
| .. method:: close() | |
| Close the temporary file, possibly deleting it depending on the | |
| *delete* and *delete_on_close* arguments passed to | |
| :func:`NamedTemporaryFile`. | |
| .. note:: | |
| ``tempfile._TemporaryFileWrapper`` is kept as a backwards compatible | |
| deprecated alias for this class. | |
| It will be removed in Python 3.21 | |
| .. versionadded:: 3.16 | |
| .. class:: SpooledTemporaryFile(max_size=0, mode='w+b', buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, *, errors=None) | |
| This class operates exactly as :func:`TemporaryFile` does, except that | |
| data is spooled in memory until the file size exceeds *max_size*, or | |
| until the file's :func:`~io.IOBase.fileno` method is called, at which point the | |
| contents are written to disk and operation proceeds as with | |
| :func:`TemporaryFile`. | |
| .. method:: SpooledTemporaryFile.rollover | |
| The resulting file has one additional method, :meth:`!rollover`, which | |
| causes the file to roll over to an on-disk file regardless of its size. | |
| The returned object is a file-like object whose :attr:`!_file` attribute | |
| is either an :class:`io.BytesIO` or :class:`io.TextIOWrapper` object | |
| (depending on whether binary or text *mode* was specified) or a true file | |
| object, depending on whether :meth:`rollover` has been called. This | |
| file-like object can be used in a :keyword:`with` statement, just like | |
| a normal file. | |
| .. versionchanged:: 3.3 | |
| the truncate method now accepts a *size* argument. | |
| .. versionchanged:: 3.8 | |
| Added *errors* parameter. | |
| .. versionchanged:: 3.11 | |
| Fully implements the :class:`io.BufferedIOBase` and | |
| :class:`io.TextIOBase` abstract base classes (depending on whether binary | |
| or text *mode* was specified). | |
| .. class:: TemporaryDirectory(suffix=None, prefix=None, dir=None, ignore_cleanup_errors=False, *, delete=True) | |
| This class securely creates a temporary directory using the same rules as :func:`mkdtemp`. | |
| The resulting object can be used as a :term:`context manager` (see | |
| :ref:`tempfile-examples`). On completion of the context or destruction | |
| of the temporary directory object, the newly created temporary directory | |
| and all its contents are removed from the filesystem. | |
| .. attribute:: TemporaryDirectory.name | |
| The directory name can be retrieved from the :attr:`!name` attribute of the | |
| returned object. When the returned object is used as a :term:`context manager`, the | |
| :attr:`!name` will be assigned to the target of the :keyword:`!as` clause in | |
| the :keyword:`with` statement, if there is one. | |
| .. method:: TemporaryDirectory.cleanup | |
| The directory can be explicitly cleaned up by calling the | |
| :meth:`!cleanup` method. If *ignore_cleanup_errors* is true, any unhandled | |
| exceptions during explicit or implicit cleanup (such as a | |
| :exc:`PermissionError` removing open files on Windows) will be ignored, | |
| and the remaining removable items deleted on a "best-effort" basis. | |
| Otherwise, errors will be raised in whatever context cleanup occurs | |
| (the :meth:`!cleanup` call, exiting the context manager, when the object | |
| is garbage-collected or during interpreter shutdown). | |
| The *delete* parameter can be used to disable cleanup of the directory tree | |
| upon exiting the context. While it may seem unusual for a context manager | |
| to disable the action taken when exiting the context, it can be useful during | |
| debugging or when you need your cleanup behavior to be conditional based on | |
| other logic. | |
| .. warning:: | |
| Cleanup is not robust against the tree being modified while it is removed. | |
| Files outside of the tree may have their permissions and file flags reset. | |
| On systems where :data:`shutil.rmtree.avoids_symlink_attacks` is | |
| false, manipulating symbolic links during cleanup | |
| may cause files outside of the tree to be removed. | |
| .. audit-event:: tempfile.mkdtemp fullpath tempfile.TemporaryDirectory | |
| .. versionadded:: 3.2 | |
| .. versionchanged:: 3.10 | |
| Added *ignore_cleanup_errors* parameter. | |
| .. versionchanged:: 3.12 | |
| Added the *delete* parameter. | |
| .. function:: mkstemp(suffix=None, prefix=None, dir=None, text=False) | |
| Creates a temporary file in the most secure manner possible. There are | |
| no race conditions in the file's creation, assuming that the platform | |
| properly implements the :const:`os.O_EXCL` flag for :func:`os.open`. The | |
| file is readable and writable only by the creating user ID. If the | |
| platform uses permission bits to indicate whether a file is executable, | |
| the file is executable by no one. | |
| The file descriptor is :ref:`not inherited by child processes <fd_inheritance>`. | |
| Unlike :func:`TemporaryFile`, the user of :func:`mkstemp` is responsible | |
| for closing the file descriptor (for example, using :func:`os.close`) and | |
| deleting the temporary file (for example, using :func:`os.remove`). | |
| If *suffix* is not ``None``, the file name will end with that suffix, | |
| otherwise there will be no suffix. :func:`mkstemp` does not put a dot | |
| between the file name and the suffix; if you need one, put it at the | |
| beginning of *suffix*. | |
| If *prefix* is not ``None``, the file name will begin with that prefix; | |
| otherwise, a default prefix is used. The default is the return value of | |
| :func:`gettempprefix` or :func:`gettempprefixb`, as appropriate. | |
| If *dir* is not ``None``, the file will be created in that directory; | |
| otherwise, a default directory is used. The default directory is chosen | |
| from a platform-dependent list, but the user of the application can | |
| control the directory location by setting the *TMPDIR*, *TEMP* or *TMP* | |
| environment variables. There is thus no guarantee that the generated | |
| filename will have any nice properties, such as not requiring quoting | |
| when passed to external commands via ``os.popen()``. | |
| If any of *suffix*, *prefix*, and *dir* are not | |
| ``None``, they must be the same type. | |
| If they are bytes, the returned name will be bytes instead of str. | |
| If you want to force a bytes return value with otherwise default behavior, | |
| pass ``suffix=b''``. | |
| If *text* is specified and true, the file is opened in text mode. | |
| Otherwise, (the default) the file is opened in binary mode. | |
| :func:`mkstemp` returns a tuple containing an OS-level handle to an open | |
| file (as would be returned by :func:`os.open`) and the absolute pathname | |
| of that file, in that order. | |
| .. audit-event:: tempfile.mkstemp fullpath tempfile.mkstemp | |
| .. versionchanged:: 3.5 | |
| *suffix*, *prefix*, and *dir* may now be supplied in bytes in order to | |
| obtain a bytes return value. Prior to this, only str was allowed. | |
| *suffix* and *prefix* now accept and default to ``None`` to cause | |
| an appropriate default value to be used. | |
| .. versionchanged:: 3.6 | |
| The *dir* parameter now accepts a :term:`path-like object`. | |
| .. function:: mkdtemp(suffix=None, prefix=None, dir=None) | |
| Creates a temporary directory in the most secure manner possible. There | |
| are no race conditions in the directory's creation. The directory is | |
| readable, writable, and searchable only by the creating user ID. | |
| The user of :func:`mkdtemp` is responsible for deleting the temporary | |
| directory and its contents when done with it. | |
| The *prefix*, *suffix*, and *dir* arguments are the same as for | |
| :func:`mkstemp`. | |
| :func:`mkdtemp` returns the absolute pathname of the new directory. | |
| .. audit-event:: tempfile.mkdtemp fullpath tempfile.mkdtemp | |
| .. versionchanged:: 3.5 | |
| *suffix*, *prefix*, and *dir* may now be supplied in bytes in order to | |
| obtain a bytes return value. Prior to this, only str was allowed. | |
| *suffix* and *prefix* now accept and default to ``None`` to cause | |
| an appropriate default value to be used. | |
| .. versionchanged:: 3.6 | |
| The *dir* parameter now accepts a :term:`path-like object`. | |
| .. versionchanged:: 3.12 | |
| :func:`mkdtemp` now always returns an absolute path, even if *dir* is relative. | |
| .. function:: gettempdir() | |
| Return the name of the directory used for temporary files. This | |
| defines the default value for the *dir* argument to all functions | |
| in this module. | |
| Python searches a standard list of directories to find one which | |
| the calling user can create files in. The list is: | |
| #. The directory named by the :envvar:`TMPDIR` environment variable. | |
| #. The directory named by the :envvar:`TEMP` environment variable. | |
| #. The directory named by the :envvar:`TMP` environment variable. | |
| #. A platform-specific location: | |
| * On Windows, the directories | |
| :file:`%USERPROFILE%\\AppData\\Local\\Temp`, | |
| :file:`%SYSTEMROOT%\\Temp`, :file:`C:\\TEMP`, | |
| :file:`C:\\TMP`, :file:`\\TEMP`, and | |
| :file:`\\TMP`, in that order. | |
| * On all other platforms, the directories :file:`/tmp`, :file:`/var/tmp`, and | |
| :file:`/usr/tmp`, in that order. | |
| #. As a last resort, the current working directory. | |
| The result of this search is cached, see the description of | |
| :data:`tempdir` below. | |
| .. versionchanged:: 3.10 | |
| Always returns a str. Previously it would return any :data:`tempdir` | |
| value regardless of type so long as it was not ``None``. | |
| .. function:: gettempdirb() | |
| Same as :func:`gettempdir` but the return value is in bytes. | |
| .. versionadded:: 3.5 | |
| .. function:: gettempprefix() | |
| Return the filename prefix used to create temporary files. This does not | |
| contain the directory component. | |
| .. function:: gettempprefixb() | |
| Same as :func:`gettempprefix` but the return value is in bytes. | |
| .. versionadded:: 3.5 | |
| The module uses a global variable to store the name of the directory | |
| used for temporary files returned by :func:`gettempdir`. It can be | |
| set directly to override the selection process, but this is discouraged. | |
| All functions in this module take a *dir* argument which can be used | |
| to specify the directory. This is the recommended approach that does | |
| not surprise other unsuspecting code by changing global API behavior. | |
| .. data:: tempdir | |
| When set to a value other than ``None``, this variable defines the | |
| default value for the *dir* argument to the functions defined in this | |
| module, including its type, bytes or str. It cannot be a | |
| :term:`path-like object`. | |
| If ``tempdir`` is ``None`` (the default) at any call to any of the above | |
| functions except :func:`gettempprefix` it is initialized following the | |
| algorithm described in :func:`gettempdir`. | |
| .. note:: | |
| Beware that if you set ``tempdir`` to a bytes value, there is a | |
| nasty side effect: The global default return type of | |
| :func:`mkstemp` and :func:`mkdtemp` changes to bytes when no | |
| explicit ``prefix``, ``suffix``, or ``dir`` arguments of type | |
| str are supplied. Please do not write code expecting or | |
| depending on this. This awkward behavior is maintained for | |
| compatibility with the historical implementation. | |
| .. _tempfile-examples: | |
| Examples | |
| -------- | |
| Here are some examples of typical usage of the :mod:`!tempfile` module:: | |
| >>> import tempfile | |
| # create a temporary file and write some data to it | |
| >>> fp = tempfile.TemporaryFile() | |
| >>> fp.write(b'Hello world!') | |
| # read data from file | |
| >>> fp.seek(0) | |
| >>> fp.read() | |
| b'Hello world!' | |
| # close the file, it will be removed | |
| >>> fp.close() | |
| # create a temporary file using a context manager | |
| >>> with tempfile.TemporaryFile() as fp: | |
| ... fp.write(b'Hello world!') | |
| ... fp.seek(0) | |
| ... fp.read() | |
| b'Hello world!' | |
| >>> | |
| # file is now closed and removed | |
| # create a temporary file using a context manager | |
| # close the file, use the name to open the file again | |
| >>> with tempfile.NamedTemporaryFile(delete_on_close=False) as fp: | |
| ... fp.write(b'Hello world!') | |
| ... fp.close() | |
| ... # the file is closed, but not removed | |
| ... # open the file again by using its name | |
| ... with open(fp.name, mode='rb') as f: | |
| ... f.read() | |
| b'Hello world!' | |
| >>> | |
| # file is now removed | |
| # create a temporary directory using the context manager | |
| >>> with tempfile.TemporaryDirectory() as tmpdirname: | |
| ... print('created temporary directory', tmpdirname) | |
| >>> | |
| # directory and contents have been removed | |
| .. _tempfile-mktemp-deprecated: | |
| Deprecated functions and variables | |
| ---------------------------------- | |
| A historical way to create temporary files was to first generate a | |
| file name with the :func:`mktemp` function and then create a file | |
| using this name. Unfortunately this is not secure, because a different | |
| process may create a file with this name in the time between the call | |
| to :func:`mktemp` and the subsequent attempt to create the file by the | |
| first process. The solution is to combine the two steps and create the | |
| file immediately. This approach is used by :func:`mkstemp` and the | |
| other functions described above. | |
| .. function:: mktemp(suffix='', prefix='tmp', dir=None) | |
| .. deprecated:: 2.3 | |
| Use :func:`mkstemp` instead. | |
| Return an absolute pathname of a file that did not exist at the time the | |
| call is made. The *prefix*, *suffix*, and *dir* arguments are similar | |
| to those of :func:`mkstemp`, except that bytes file names, ``suffix=None`` | |
| and ``prefix=None`` are not supported. | |
| .. warning:: | |
| Use of this function may introduce a security hole in your program. By | |
| the time you get around to doing anything with the file name it returns, | |
| someone else may have beaten you to the punch. :func:`mktemp` usage can | |
| be replaced easily with :func:`NamedTemporaryFile`, passing it the | |
| ``delete=False`` parameter:: | |
| >>> f = NamedTemporaryFile(delete=False) | |
| >>> f.name | |
| '/tmp/tmptjujjt' | |
| >>> f.write(b"Hello World!\n") | |
| 13 | |
| >>> f.close() | |
| >>> os.unlink(f.name) | |
| >>> os.path.exists(f.name) | |
| False |