\section{\module{tempfile} ---
         Generate temporary files and directories}
\sectionauthor{Zack Weinberg}{zack@codesourcery.com}

\declaremodule{standard}{tempfile}
\modulesynopsis{Generate temporary files and directories.}

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

This module generates temporary files and directories.  It works on
all supported platforms.

In version 2.3 of Python, this module was overhauled for enhanced
security.  It now provides three new functions,
\function{NamedTemporaryFile()}, \function{mkstemp()}, and
\function{mkdtemp()}, which should eliminate all remaining need to use
the insecure \function{mktemp()} function.  Temporary file names created
by this module no longer contain the process ID; instead a string of
six random characters is used.

Also, all the user-callable functions now take additional arguments
which allow direct control over the location and name of temporary
files.  It is no longer necessary to use the global \var{tempdir} and
\var{template} variables.  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 functions:

\begin{funcdesc}{TemporaryFile}{\optional{mode=\code{'w+b'}\optional{,
                                bufsize=\code{-1}\optional{,
                                suffix\optional{, prefix\optional{, dir}}}}}}
Return a file (or file-like) object that can be used as a temporary
storage area.  The file is created using \function{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 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 \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.

The \var{dir}, \var{prefix} and \var{suffix} parameters are passed to
\function{mkstemp()}.
\end{funcdesc}

\begin{funcdesc}{NamedTemporaryFile}{\optional{mode=\code{'w+b'}\optional{,
                                     bufsize=\code{-1}\optional{,
                                     suffix\optional{, prefix\optional{,
                                     dir}}}}}}
This function operates exactly as \function{TemporaryFile()} does,
except that the file is guaranteed to have a visible name in the file
system (on \UNIX, the directory entry is not unlinked).  That name can
be retrieved from the \member{name} member of the file object.  Whether
the name can be used to open the file a second time, while the
named temporary file is still open, varies across platforms (it can
be so used on \UNIX; it cannot on Windows NT or later).
\versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{mkstemp}{\optional{suffix\optional{,
                          prefix\optional{, dir\optional{, text}}}}}
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 \constant{O_EXCL} flag for
\function{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 not inherited by child processes.

Unlike \function{TemporaryFile()}, the user of \function{mkstemp()} is
responsible for deleting the temporary file when done with it.

If \var{suffix} is specified, the file name will end with that suffix,
otherwise there will be no suffix.  \function{mkstemp()} does not put a
dot between the file name and the suffix; if you need one, put it at
the beginning of \var{suffix}.

If \var{prefix} is specified, the file name will begin with that
prefix; otherwise, a default prefix is used.

If \var{dir} is specified, the file will be created in that directory;
otherwise, a default directory is used.

If \var{text} is specified, it indicates whether to open the file in
binary mode (the default) or text mode.  On some platforms, this makes
no difference.

\function{mkstemp()} returns a tuple containing an OS-level handle to
an open file (as would be returned by \function{os.open()}) and the
absolute pathname of that file, in that order.
\versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{mkdtemp}{\optional{suffix\optional{, prefix\optional{, dir}}}}
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 \function{mkdtemp()} is responsible for deleting the
temporary directory and its contents when done with it.

The \var{prefix}, \var{suffix}, and \var{dir} arguments are the same
as for \function{mkstemp()}.

\function{mkdtemp()} returns the absolute pathname of the new directory.
\versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{mktemp}{\optional{suffix\optional{, prefix\optional{, dir}}}}
\deprecated{2.3}{Use \function{mkstemp()} instead.}
Return an absolute pathname of a file that did not exist at the time
the call is made.  The \var{prefix}, \var{suffix}, and \var{dir}
arguments are the same as for \function{mkstemp()}.

\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.}
\end{funcdesc}

The module uses two global variables that tell it how to construct a
temporary name.  They are initialized at the first call to any of the
functions above.  The caller may change them, but this is discouraged;
use the appropriate function arguments, instead.

\begin{datadesc}{tempdir}
When set to a value other than \code{None}, this variable defines the
default value for the \var{dir} argument to all the functions defined
in this module.

If \code{tempdir} is unset or \code{None} at any call to any of the
above functions, Python searches a standard list of directories and
sets \var{tempdir} to the first one which the calling user can create
files in.  The list is:

\begin{enumerate}
\item The directory named by the \envvar{TMPDIR} environment variable.
\item The directory named by the \envvar{TEMP} environment variable.
\item The directory named by the \envvar{TMP} environment variable.
\item A platform-specific location:
    \begin{itemize}
    \item On Macintosh, the \file{Temporary Items} folder.
    \item On RiscOS, the directory named by the
          \envvar{Wimp\$ScrapDir} environment variable.
    \item On Windows, the directories
          \file{C:$\backslash$TEMP},
          \file{C:$\backslash$TMP},
          \file{$\backslash$TEMP}, and
          \file{$\backslash$TMP}, in that order.
    \item On all other platforms, the directories
          \file{/tmp}, \file{/var/tmp}, and \file{/usr/tmp}, in that order.
    \end{itemize}
\item As a last resort, the current working directory.
\end{enumerate}
\end{datadesc}

\begin{funcdesc}{gettempdir}{}
Return the directory currently selected to create temporary files in.
If \code{tempdir} is not \code{None}, this simply returns its contents;
otherwise, the search described above is performed, and the result
returned.
\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 six random letters and digits is
appended to the prefix to make the filename unique.  On Windows,
the default prefix is \file{\textasciitilde{}T}; on all other systems
it is \file{tmp}.

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}

\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 reading the \var{template} variable directly.
\versionadded{1.5.2}
\end{funcdesc}
