cinap_lenrekadd hg and python4bb9e2215 years agoHistory
194 lines · 8.7 KB · TeX
RawDownload
\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 onall supported platforms. In version 2.3 of Python, this module was overhauled for enhancedsecurity.  It now provides three new functions,\function{NamedTemporaryFile()}, \function{mkstemp()}, and\function{mkdtemp()}, which should eliminate all remaining need to usethe insecure \function{mktemp()} function.  Temporary file names createdby this module no longer contain the process ID; instead a string ofsix random characters is used. Also, all the user-callable functions now take additional argumentswhich allow direct control over the location and name of temporaryfiles.  It is no longer necessary to use the global \var{tempdir} and\var{template} variables.  To maintain backward compatibility, theargument order is somewhat odd; it is recommended to use keywordarguments 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 temporarystorage area.  The file is created using \function{mkstemp}. It willbe destroyed as soon as it is closed (including an implicit close whenthe object is garbage collected).  Under \UNIX, the directory entryfor the file is removed immediately after the file is created.  Otherplatforms do not support this; your code should not rely on atemporary file created using this function having or not having avisible name in the file system. The \var{mode} parameter defaults to \code{'w+b'} so that the filecreated can be read and written without being closed.  Binary mode isused so that it behaves consistently on all platforms without regardfor 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 filesystem (on \UNIX, the directory entry is not unlinked).  That name canbe retrieved from the \member{name} member of the file object.  Whetherthe name can be used to open the file a second time, while thenamed temporary file is still open, varies across platforms (it canbe 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.  Thereare no race conditions in the file's creation, assuming that theplatform properly implements the \constant{O_EXCL} flag for\function{os.open()}.  The file is readable and writable only by thecreating user ID.  If the platform uses permission bits to indicatewhether a file is executable, the file is executable by no one.  Thefile descriptor is not inherited by child processes. Unlike \function{TemporaryFile()}, the user of \function{mkstemp()} isresponsible 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 adot between the file name and the suffix; if you need one, put it atthe beginning of \var{suffix}. If \var{prefix} is specified, the file name will begin with thatprefix; 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.  The default directory is chosenfrom a platform-dependent list, but the user of the application can controlthe directory location by setting the \var{TMPDIR}, \var{TEMP} or \var{TMP}environment variables.  There is thus no guarantee that the generatedfilename will have any nice properties, such as not requiring quoting whenpassed to external commands via \code{os.popen()}. If \var{text} is specified, it indicates whether to open the file inbinary mode (the default) or text mode.  On some platforms, this makesno difference. \function{mkstemp()} returns a tuple containing an OS-level handle toan open file (as would be returned by \function{os.open()}) and theabsolute 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.  Thedirectory is readable, writable, and searchable only by thecreating user ID. The user of \function{mkdtemp()} is responsible for deleting thetemporary directory and its contents when done with it. The \var{prefix}, \var{suffix}, and \var{dir} arguments are the sameas 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 timethe 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 yourprogram.  By the time you get around to doing anything with the filename 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 atemporary name.  They are initialized at the first call to any of thefunctions 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 thedefault value for the \var{dir} argument to all the functions definedin this module. If \code{tempdir} is unset or \code{None} at any call to any of theabove functions, Python searches a standard list of directories andsets \var{tempdir} to the first one which the calling user can createfiles 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 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 resultreturned.\end{funcdesc} \begin{datadesc}{template}\deprecated{2.0}{Use \function{gettempprefix()} instead.}When set to a value other than \code{None}, this variable defines theprefix of the final component of the filenames returned by\function{mktemp()}.  A string of six random letters and digits isappended to the prefix to make the filename unique.  On Windows,the default prefix is \file{\textasciitilde{}T}; on all other systemsit is \file{tmp}. Older versions of this module used to require that \code{template} beset to \code{None} after a call to \function{os.fork()}; this has notbeen necessary since version 1.5.2.\end{datadesc} \begin{funcdesc}{gettempprefix}{}Return the filename prefix used to create temporary files.  This doesnot contain the directory component.  Using this function is preferredover reading the \var{template} variable directly.\versionadded{1.5.2}\end{funcdesc}