当尝试以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))?
答案 0 :(得分:1)
使用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
了解更多here。