Recently I am using Python module os, when I tried to change the permission of a file, I did not get the expected result. For example, I intended to change the permission to rw-rw-r--,
os.chmod("/tmp/test_file", 664)
The ownership permission is actually -w--wx--- (230)
--w--wx--- 1 ag ag 0 Mar 25 05:45 test_file
However, if I change 664 to 0664 in the code, the result is just what I need, e.g.
os.chmod("/tmp/test_file", 0664)
The result is:
-rw-rw-r-- 1 ag ag 0 Mar 25 05:55 test_file
Could anybody help explaining why does that leading 0 is so important to get the correct result?
So for people who want semantics similar to:
In python 2:
In python 3:
leading "0" means this is octal constant, not the decimal one. and you need an octal to change file mode.
permissions are a bit mask, for example, rwxrwx--- is 111111000 in binary, and it's very easy to group bits by 3 to convert to the octal, than calculate the decimal representation.
0644 (octal) is 0.110.100.100 in binary (i've added dots for readability), or, as you may calculate, 420 in decimal.
Found this on a different forum
What you are doing is passing
664
which in octal is1230
In your case you would need
[Update] Note, for Python 3 you have prefix with 0o (zero oh). E.G,
0o666