Can I set the umask for tempfile.NamedTemporaryFile in python?

吃可爱长大的小学妹 提交于 2019-12-18 21:54:52

问题


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.


回答1:


This is a security feature. The NamedTemporaryFile is always created with mode 0600, hardcoded at tempfile.py, line 235, because it is private to your process until you open it up with chmod. There is no constructor argument to change this behavior.




回答2:


In case it might help someone, I wanted to do more or less the same thing, here is the code I have used:

import os
from tempfile import NamedTemporaryFile

def UmaskNamedTemporaryFile(*args, **kargs):
    fdesc = NamedTemporaryFile(*args, **kargs)
    umask = os.umask(0)
    os.umask(umask)
    os.chmod(fdesc.name, 0o666 & ~umask)
    return fdesc


来源:https://stackoverflow.com/questions/10541760/can-i-set-the-umask-for-tempfile-namedtemporaryfile-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!