在Python中(在2.7及以下版本中尝试过),看起来使用tempfile.NamedTemporaryFile
创建的文件似乎不遵守umask指令:
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
知道为什么NamedTemporaryFile
不会拿起umask吗?在文件创建过程中有没有办法做到这一点?
我总是可以使用os.chmod()来解决这个问题,但是我希望在文件创建过程中做出正确的事情。
答案 0 :(得分:26)
这是一项安全功能。 NamedTemporaryFile
始终使用模式0600
创建,在tempfile.py
, line 235进行硬编码,因为在您使用chmod
打开它之前,它对您的流程是私有的。没有构造函数参数可以更改此行为。
答案 1 :(得分:7)
如果它可以帮助某人,我想做或多或少相同的事情,这是我使用的代码:
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