In Python (tried this in 2.7 and below) it looks like a file created using tempfile.NamedTemporaryFile doesn’t seem to obey the umask directive:
import os, tempfile
os.umask(022)
f1 = open ("goodfile", "w")
f2 = tempfile.NamedTemporaryFile(dir='.')
f2.name
Out[33]: '/Users/foo/tmp4zK9Fe'
ls -l
-rw------- 1 foo foo 0 May 10 13:29 /Users/foo/tmp4zK9Fe
-rw-r--r-- 1 foo foo 0 May 10 13:28 /Users/foo/goodfile
Any idea why NamedTemporaryFile won’t pick up the umask? Is there any way to do this during file creation?
I can always workaround this with os.chmod(), but I was hoping for something that did the right thing during file creation.
This is a security feature. The
NamedTemporaryFileis always created with mode0600, hardcoded attempfile.py, line 235, because it is private to your process until you open it up withchmod. There is no constructor argument to change this behavior.