Настройки разрешений 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 вместо.

Другие вопросы по тегам