Вопрос по python, file – Могу ли я установить umask для tempfile.NamedTeoraryFile в python?

8

В Python (пробовал это в 2.7 и ниже) он выглядит как файл, созданный с помощьюtempfile.NamedTemporaryFile похоже не подчиняется директиве umask:

<code>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
</code>

Любая идея, почемуNamedTemporaryFile не поднимешь маску? Есть ли способ сделать это во время создания файла?

Я всегда могу обойти это с помощью os.chmod (), но я надеялся, что что-то будет делать правильно при создании файла.

Ваш Ответ

2   ответа
26

NamedTemporaryFile всегда создается в режиме0600, жестко закодировано наtempfile.py, строка 235, потому что это приватно для вашего процесса, пока вы не откроете его с помощьюchmod. Нет аргумента конструктора, чтобы изменить это поведение.

Спасибо - должен любить ответ, который ссылается на конкретную строку в источнике! shreddd
Спасибо за Ваш ответ. Я просто отмечу, что это странно, иначе мне не хватает другого способа сделать то, что я хочу. Я просто хочу использовать NamedTeoraryFile только для того, чтобы я мог выбросить его, если у меня возникнут ошибки, генерирующие его, но перенести его в случае успеха в файл, который я мог бы создать с открытым открытием (name, 'w "). запрос функции вызван для .... nealmcb
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
Просто то, что я хотел! Большое спасибо за то, что дразнили сантехнику низкого уровня, которую мы вынуждены делать! :) nealmcb

Похожие вопросы