os.open不会使用给定的权限模式创建文件

时间:2018-11-20 10:00:52

标签: python linux chmod pathlib

当尝试以777模式使用os.open打开文件时(意味着允许所有操作)-

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 :(得分:1)

使用open创建文件时,open设置会修改umask调用中指定的权限。 umask定义“被屏蔽”的位。在我的系统上,看来我当前的umask0002

$ 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

了解更多here