Python创建临时目录的权限问题

3
我将用Python脚本创建Linux文件系统的副本。我在创建/tmp目录时遇到了权限问题。/tmp目录的权限应该是1777,即:
ls -l /
drwxrwxrwt  17 root     root 16384 2011-03-01 09:50 tmp

当我执行以下操作时,
os.mkdir('/mnt/tmp',1777)

我遇到了奇怪的权限问题:

ls -l /
d-wxr----t 2 root root  4096 2011-03-01 09:53 tmp

然后我对umask和chmod产生了疑问,于是我尝试了以下操作:

os.mkdir('/mnt/tmp')
old_mask=os.umask(0000)
os.chmod('/mnt/tmp',1777)
os.umask(old_mask)

但我仍然收到意外的权限:

ls -l /
d-wxrwS--t 2 root root  4096 2011-03-01 09:57 tmp

然而,能够给我创建的目录正确的权限的是以下内容:
os.mkdir('/mnt/tmp')
os.system("chmod 1777 /mnt/tmp")

我应该指出,我是通过sudo运行此脚本的,但/etc/sudoers中没有提到任何umask设置。以实际的root用户身份运行它没有任何区别。由于我正在复制FS,其中必须包括仅对root可访问的文件,因此无法以普通用户身份运行它。
有什么想法吗?任何帮助都将不胜感激。
2个回答

9

您应该以八进制数的形式提供权限。在Python 2.x中,只需使用01777而不是1777。在Python 3.x中,请使用0o1777


太棒了!感谢你的提示。为了记录,我必须执行以下操作: os.umask(00000) os.mkdir('/mnt/tmp',01777) 才能使它正常工作。再次感谢! - Kyle Fransham

1

你的权限应该是八进制的(八进制中的777在十进制中是511)。

在Python中,就像在C语言中一样,0555表示八进制中的555。 如果你想要八进制中的1777,在你的代码中使用01777。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接