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

时间:2016-02-22 21:57:31

标签: python file umask

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

import os
f = os.open('file', os.O_CREAT, 0777)
os.close(f)

但是......

$ ls -l
-rwxr-xr-x 1 pi pi  0 Feb 22 13:51 file

然而,这个脚本有效,我不明白其中的区别:

import os  
f = os.open('file', os.O_CREAT)
os.fchmod(f, 0777)
os.close(f)

......然后:

$ ls -l
-rwxrwxrwx 1 pi pi  0 Feb 22 13:54 file

1 个答案:

答案 0 :(得分:4)

您没有设置umask,您正在设置umask 屏蔽的文件模式位。 Per the documentation

  

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

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

os.fchmod(f, 0777)

尽管0777值为umask,但仍明确将文件权限设置为repositories { jcenter() } dependencies { compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar' compile 'com.google.zxing:core:3.2.1' compile 'com.android.support:appcompat-v7:23.1.0' // Version 23+ is required } android { buildToolsVersion '23.0.2' // Older versions may give compile errors }