diff -r 5e98a50e0f55 Lib/tempfile.py --- a/Lib/tempfile.py Thu May 15 14:37:42 2014 +0300 +++ b/Lib/tempfile.py Fri May 16 11:12:46 2014 +0200 @@ -33,6 +33,7 @@ import io as _io import os as _os import shutil as _shutil import errno as _errno +import sys as _sys from random import Random as _Random import weakref as _weakref @@ -55,6 +56,14 @@ if hasattr(_os, 'TMP_MAX'): else: TMP_MAX = 10000 +if hasattr(_os, 'O_TMPFILE'): + _O_TMPFILE = _os.O_TMPFILE +elif _sys.platform == 'linux': + __O_TMPFILE = 0o20000000 + _O_TMPFILE = (__O_TMPFILE | _os.O_DIRECTORY) +else: + _O_TMPFILE = None + # Although it does not have an underscore for historical reasons, this # variable is an internal implementation detail (see issue 10354). template = "tmp" @@ -493,15 +502,24 @@ else: dir = gettempdir() flags = _bin_openflags - - (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags) - try: - _os.unlink(name) - return _io.open(fd, mode, buffering=buffering, - newline=newline, encoding=encoding) - except: - _os.close(fd) - raise + if _O_TMPFILE is not None: + flags = (flags | _O_TMPFILE) & ~_os.O_CREAT + fd = _os.open(dir, flags, 0o600) + try: + return _io.open(fd, mode, buffering=buffering, + newline=newline, encoding=encoding) + except: + _os.close(fd) + raise + else: + (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags) + try: + _os.unlink(name) + return _io.open(fd, mode, buffering=buffering, + newline=newline, encoding=encoding) + except: + _os.close(fd) + raise class SpooledTemporaryFile: """Temporary file wrapper, specialized to switch from BytesIO