2

当尝试使用 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))?

4

1 回答 1

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

在这里阅读更多。

于 2018-11-20T12:50:47.397 回答