Python os.open() 无法将 umask 设置为 777(最大 755)

pin*_*ead 3 python file umask

如果文件不存在,我的 python 脚本会创建一个文件,读取和写入该文件。该脚本可以由 root(自动)或用户(刷新请求)运行。我需要使用写权限创建文件,以便在这两种情况下都可以重写文件。

import os
f = os.open('file', os.O_CREAT, 0777)
os.close(f)
Run Code Online (Sandbox Code Playgroud)

但是之后...

$ ls -l
-rwxr-xr-x 1 pi pi  0 Feb 22 13:51 file
Run Code Online (Sandbox Code Playgroud)

但是,此脚本有效,我不明白其中的区别:

import os  
f = os.open('file', os.O_CREAT)
os.fchmod(f, 0777)
os.close(f)
Run Code Online (Sandbox Code Playgroud)

...进而:

$ ls -l
-rwxrwxrwx 1 pi pi  0 Feb 22 13:54 file
Run Code Online (Sandbox Code Playgroud)

And*_*nle 5

你没有设置umask,你设置的权限模式,这是掩盖umask根据文档

打开文件文件并根据标志设置各种标志,并可能根据模式设置其模式。默认模式为 0777(八进制), 先屏蔽掉当前的 umask 值。...

您的umask值似乎是0022,从而屏蔽了组和其他用户的写入权限。

这个

os.fchmod(f, 0777)
Run Code Online (Sandbox Code Playgroud)

显式地将文件权限设置为0777尽管umask值。