您可能需要向我们展示构成的代码:
[do some other code here that creates a file]
您的代码在我的系统上运行良好:
import os
oldmask = os.umask (022)
fh1 = os.open ("qq1.junk", os.O_CREAT, 0777)
fh2 = os.open ("qq2.junk", os.O_CREAT, 0022)
os.umask (oldmask)
os.close (fh1)
os.close (fh2)
生成文件如下:
-rwxr-xr-x 1 pax pax 0 Apr 24 11:11 qq1.junk
---------- 1 pax pax 0 Apr 24 11:11 qq2.junk
您还应该注意旧umask
值的恢复,从而最大限度地减少将其更改为本地操作的影响。
正如您从上面的结果中看到的那样,您还需要注意该umask
值是从您用于创建文件的模式中“减去”的,我们不知道在您的特定情况下该模式是什么。
即使在您的bash
示例中也很明显,因为创建模式文件时的umask
值会导致,而不是您所拥有的。022
777
r-xr-xr-x
rw-r--r--
根据您在下面表明您使用open
而不是的评论os.open
,粗略地浏览一下 Python 源代码似乎表明这转换为用作初始模式的 Cfopen
调用。0666
稍作修改的代码支持这一点:
import os
oldmask = os.umask (022)
fh3 = open ("qq3.junk", "w")
os.umask (0)
fh4 = open ("qq4.junk", "w")
os.umask (oldmask)
fh3.close()
fh4.close()
这给了我们:
-rw-r--r-- 1 pax pax 0 Apr 24 11:44 qq3.junk
-rw-rw-rw- 1 pax pax 0 Apr 24 11:44 qq4.junk
所以我不完全确定你为什么会0000
在你的情况下获得权限。
当您在您的环境中运行上述程序时,看看结果如何是值得的。如果它与我得到的相同,那么问题很可能出在其他地方。