我可以在python中为tempfile.NamedTemporaryFile设置umask吗?

时间:2012-05-10 20:36:50

标签: python file permissions

在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()来解决这个问题,但是我希望在文件创建过程中做出正确的事情。

2 个答案:

答案 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