Python模块os.chmod(文件,664)不会将权限更改为rw-rw-r-但是-w – wx —-
最近我使用Python模块操作系统,当我试图改变一个文件的权限,我没有得到预期的结果。 例如,我打算将权限更改为rw-rw-r–,
os.chmod("/tmp/test_file", 664)
所有权许可实际上是-w – wx —(230)
--w--wx--- 1 ag ag 0 Mar 25 05:45 test_file
但是,如果我在代码中将664更改为0664,则结果就是我所需要的,例如
os.chmod("/tmp/test_file", 0664)
结果是:
-rw-rw-r-- 1 ag ag 0 Mar 25 05:55 test_file
有人可以帮助解释为什么这个领先的0对于得到正确的结果是如此重要吗?
在另一个论坛上find这个
如果你想知道为什么这个前导零是重要的,那是因为权限被设置为一个八进制整数,Python自动将任何具有前导零的整数视为八进制。 所以os.chmod(“file”,484)(十进制)会给出相同的结果。
你正在做的是通过664
八进制是1230
在你的情况下,你会需要
os.chmod("/tmp/test_file", 436)
[更新]请注意,对于Python 3,您的前缀为0(零哦)。 EG, 0o666
所以对于那些想要类似于symantics的人来说:
$ chmod 755 somefile
在python2中:
$ python -c "import os; os.chmod('somefile', 0755)"
但在python3中:
$ python3 -c "import os; os.chmod('somefile', 0o755)"
领先的“0”意味着这是八进制常数,而不是小数。 你需要一个八进制来改变文件模式。
权限是一个位掩码,例如,rwxrwx —是二进制的111111000,并且很容易将3个位组合成8进制数,而不是计算十进制表示。
0644(八进制)是二进制的0.110.100.100(为了便于阅读,我添加了小点),或者如你所计算的,十进制是420。