os.open не создает файлы с данным режимом разрешений - PullRequest
0 голосов
/ 20 ноября 2018

При попытке открыть файл с помощью os.open в режиме 777 (то есть разрешить все) -

os.open("/tmp/lol", flags=(os.O_CREAT), mode=0o777)

Создает файл без разрешения на запись, как это -

-rwxrwxr-x  1 cybellum cybellum       0 Nov 20 09:38 lol*

При попытке использовать chmod ("/ tmp / lol", 0o777) файл получает необходимые разрешения:

-rwxrwxrwx  1 cybellum cybellum       0 Nov 20 09:38 lol*

Почему os.open не работает должным образом?
Есть ли способ создать файл в режиме 777 (и если файл существует, он просто изменит разрешения .. (потому что я пробовал pathlib.Path.touch))?

1 Ответ

0 голосов
/ 20 ноября 2018

Когда вы создаете файл с open, разрешения, указанные в вызове open, изменяются вашим параметром umask.umask определяет биты, которые "замаскированы".В моей системе, похоже, что мой текущий umask равен 0002:

$ umask
0002

Это означает, что когда я запускаю код, подобный вашему:

import os
os.open('testfile', flags=(os.O_CREAT), mode=0o777)

я получуСледующее поведение:

$ python filetest
$ ls -l testfile
-rwxrwxr-x. 1 lars lars       0 Nov 20 07:47 testfile

Я могу установить для umask различные значения для управления разрешениями, применяемыми по умолчанию:

$ umask 022
$ python filetest
$ ls -l testfile
-rwxr-xr-x. 1 lars lars 0 Nov 20 07:49 testfile

Или:

$ umask 077
$ python filetest.py
$ ls -l testfile
-rwx------. 1 lars lars 0 Nov 20 07:50 testfile

Подробнее здесь .

...