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, NamedTemporaryFile(), mkstemp(), and mkdtemp(), which should eliminate all remaining need to use the insecure 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 tempdir and 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:
[mode='w+b' [,
bufsize=-1 [,
suffix[, prefix[, dir]]]]]) |
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. bufsize defaults to -1
,
meaning that the operating system default is used.
The dir, prefix and suffix parameters are passed to mkstemp().
[mode='w+b' [,
bufsize=-1 [,
suffix[, prefix[,
dir]]]]]) |
[suffix[, prefix[, dir[, text]]]]) |
Unlike TemporaryFile(), the user of mkstemp() is responsible for deleting the temporary file when done with it.
If suffix is specified, the file name will end with that suffix, otherwise there will be no suffix. 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 specified, the file name will begin with that prefix; otherwise, a default prefix is used.
If dir is specified, 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 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.
mkstemp() returns a tuple containing an OS-level handle to an open file (as would be returned by os.open()) and the absolute pathname of that file, in that order. New in version 2.3.
[suffix[, prefix[, dir]]]) |
The user of 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 mkstemp().
mkdtemp() returns the absolute pathname of the new directory. New in version 2.3.
[suffix[, prefix[, dir]]]) |
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.
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.
None
, this variable defines the
default value for the dir argument to all the functions defined
in this module.
If tempdir
is unset or None
at any call to any of the
above functions, Python searches a standard list of directories and
sets tempdir to the first one which the calling user can create
files in. The list is:
) |
tempdir
is not None
, this simply returns its contents;
otherwise, the search described above is performed, and the result
returned.
None
, this variable defines the
prefix of the final component of the filenames returned by
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 ~T; on all other systems
it is tmp.
Older versions of this module used to require that template
be
set to None
after a call to os.fork(); this has not
been necessary since version 1.5.2.
) |