【发布时间】:2012-05-04 16:32:56
【问题描述】:
我正在尝试使用 os 模块设置 umask。请注意,我在 ~/.profile 中设置的正常 umask 是 umask 0027。
在 bash shell 中,
umask 0022
将允许创建具有权限的文件
-rw-r--r--
但是,当我们导入 os 模块并这样做时:
os.umask(0022)
[do some other code here that creates a file]
我获得了权限
----------
首先,如何让 os.umask(mask) 在 shell 中表现得像 umask?
二、两者区别的逻辑是什么?
注意:我尝试将 0022 转换为十进制,以防它期望小数:
os.umask(18)
但它授予了权限
-----w--w-
还请注意,我试过了
os.umask(00022)
和
os.mask(0o0022)
这也不起作用。
【问题讨论】:
-
文件是否可能已经存在?在这种情况下,您将需要使用 chmod
-
@gnibbler:不,它之前被删除了,但这是个好主意。
-
@Ignacio Vazquez-Abrams:尝试先在 shell 中设置 umask 0027,然后运行脚本或调用您的解释器。
-
@Ignacio Vazquez-Abrams:你说得对,我也不能使用与我的代码分开的简单测试 python 程序。奇怪,因为我使用的是相同的技术。
-
使用
old_mask = os.umask(0o000)然后os.makedirs(./foo/bar)按预期创建带有777的目录。而oct(old_mask)给出的022是正确的(Unix 上的默认 umask)。