如果文件不存在,我的 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)
你没有设置umask,你设置的权限模式,这是掩盖由umask。 根据文档:
打开文件文件并根据标志设置各种标志,并可能根据模式设置其模式。默认模式为 0777(八进制), 先屏蔽掉当前的 umask 值。...
您的umask值似乎是0022,从而屏蔽了组和其他用户的写入权限。
这个
os.fchmod(f, 0777)
Run Code Online (Sandbox Code Playgroud)
显式地将文件权限设置为0777尽管umask值。