我可以设置的umask tempfile.NamedTemporaryFile在Python?(Ca

2019-06-24 07:55发布

在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()解决此,但我希望的东西,文件创建过程中做了正确的事情。

Answer 1:

这是一项安全功能。 该NamedTemporaryFile总是与模式创建0600 ,在硬编码tempfile.py ,线235 ,因为它是专用于你的过程,直到你打开它chmod 。 有没有构造函数的参数来改变这种行为。



Answer 2:

在情况下,它可能会帮助别人,我想要做或多或少同样的事情,这里是我使用的代码:

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


文章来源: Can I set the umask for tempfile.NamedTemporaryFile in python?