Настройки разрешений tempfile.mkstemp
Я использую tempfile.mkstemp
генерировать случайное доступное имя файла и написать некоторый контент с os.fdopen
, Затем я передаю имя файла в задачу через celery
,
Эта задача открывает файл, обрабатывает содержимое и, наконец, удаляет файл. При тестировании это работает нормально, однако я понял, что это сломается в моей рабочей среде, где пользователь, выполняющий задачу, не совпадает с пользователем, который создает файл.
Это означает, что пользователь не может открыть файл, потому что tempfile.mkstemp
устанавливает разрешения для 600
(-rw-------
).
Я не могу запустить оба процесса одним и тем же пользователем, поэтому есть ли способ изменить права доступа к файлам, установленные tempfile.mkstemp
?
Я использую Python 3.6 в Ubuntu 14.04.
2 ответа
Учитывая, что вы используете os.fdopen после вызова mkstemp(), вам может быть лучше использовать tempfile.NamedTevenFile(delete=False). Он возвращает объект файла Python вместо fd
,
В любом случае, возвращенный файл будет иметь режим =0600, поэтому вам придется его изменить. использование os.fchmod(temp_file.fileno(), 0640)
или аналогичный (измените режим в соответствии с вашими потребностями).
Нет, кроме ручного изменения разрешений с помощью chmod
команда, нет способа изменить разрешения файла, созданного tempfile.mkstemp
, Эта функция по своему замыслу создает временный файл максимально безопасным способом, поэтому файл доступен для чтения и записи только при создании идентификатора пользователя. Смотрите документацию mkstemp.
Создайте свой временный файл, используя tempfile.TemporaryFile
или же tempfile.NamedTemporaryFile
вместо.