\section{\module{tempfile} ---
         Generate temporary file names}

\declaremodule{standard}{tempfile}
\modulesynopsis{Generate temporary file names.}

\indexii{temporary}{file name}
\indexii{temporary}{file}


This module generates temporary file names.  It is not \UNIX{} specific,
but it may require some help on non-\UNIX{} systems.

The module defines the following user-callable functions:

\begin{funcdesc}{mktemp}{\optional{suffix}}
Return a unique temporary filename.  This is an absolute pathname of a
file that does not exist at the time the call is made.  No two calls
will return the same filename.  \var{suffix}, if provided, is used as
the last part of the generated file name.  This can be used to provide
a filename extension or other identifying information that may be
useful on some platforms.
\end{funcdesc}

\begin{funcdesc}{TemporaryFile}{\optional{mode\optional{,
                                bufsize\optional{, suffix}}}}
Return a file (or file-like) object that can be used as a temporary
storage area.  The file is created in the most secure manner available
in the appropriate temporary directory for the host platform.  Under
\UNIX, the directory entry to the file is removed so that it is secure
against attacks which involve creating symbolic links to the file or
replacing the file with a symbolic link to some other file.  For other
platforms, which don't allow removing the directory entry while the
file is in use, the file is automatically deleted as soon as it is
closed (including an implicit close when it is garbage-collected).

The \var{mode} parameter defaults to \code{'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.  \var{bufsize} defaults to \code{-1},
meaning that the operating system default is used.  \var{suffix} is
passed to \function{mktemp()}.
\end{funcdesc}

The module uses two global variables that tell it how to construct a
temporary name.  The caller may assign values to them; by default they
are initialized at the first call to \function{mktemp()}.

\begin{datadesc}{tempdir}
When set to a value other than \code{None}, this variable defines the
directory in which filenames returned by \function{mktemp()} reside.
The default is taken from the environment variable \envvar{TMPDIR}; if
this is not set, either \file{/usr/tmp} is used (on \UNIX), or the
current working directory (all other systems).  No check is made to
see whether its value is valid.
\end{datadesc}

\begin{funcdesc}{gettempprefix}{}
Return the filename prefix used to create temporary files.  This does
not contain the directory component.  Using this function is preferred
over using the \code{template} variable directly.
\versionadded{1.5.2}
\end{funcdesc}

\begin{datadesc}{template}
\deprecated{2.0}{Use \function{gettempprefix()} instead.}
When set to a value other than \code{None}, this variable defines the
prefix of the final component of the filenames returned by
\function{mktemp()}.  A string of decimal digits is added to generate
unique filenames.  The default is either \file{@\var{pid}.} where
\var{pid} is the current process ID (on \UNIX),
\file{\textasciitilde\var{pid}-} on Windows NT, \file{Python-Tmp-} on
MacOS, or \file{tmp} (all other systems).

Older versions of this module used to require that \code{template} be
set to \code{None} after a call to \function{os.fork()}; this has not
been necessary since version 1.5.2.
\end{datadesc}
