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

shr*_*ddd 10 python permissions file

在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
Run Code Online (Sandbox Code Playgroud)

知道为什么NamedTemporaryFile不拿起umask吗?在文件创建过程中有没有办法做到这一点?

我总是可以使用os.chmod()来解决这个问题,但是我希望在文件创建过程中做出正确的事情.

Fre*_*Foo 28

这是一项安全功能.将NamedTemporaryFile始终与模式创建0600,在硬编码tempfile.py,线235,因为它是专用于你的过程,直到你打开它chmod.没有构造函数参数可以更改此行为.

  • 谢谢 - 得到一个链接到源中特定行的答案! (8认同)
  • 感谢您的回答。我只是注意到这很奇怪,否则我就错过了另一种做自己想做的方法。我只是想使用NamedTemporaryFile,以便在遇到生成该文件的错误时可以将其丢弃,但是一旦成功将其移动到本来可以用纯open(name,'w“)创建的文件中即可。需要功能请求。 (2认同)

Pie*_*rre 13

如果它可以帮助某人,我想做或多或少相同的事情,这是我使用的代码:

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
Run Code Online (Sandbox Code Playgroud)

  • 正是我想要的!非常感谢您嘲笑我们被迫做的低级管道!:) (2认同)