\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}
