0640
is an octal number (that is the meaning of the leading 0
, which doesn't count as a digit), and means the following permissions (see e.g. Wikipedia):
- the first digit is for the file's owner, and (as
6
is 110
in binary, where the bits are read, write and execute permission respectively) means
read and write permission;
- the second digit is for the group, and (as
4
is 100
in binary) means read-only; and
- the third digit is for other users, and means no permissions (
0
is 000
!)
Therefore in this case you want to combine S_IRUSR
(user read), S_IWUSR
(user write) and S_IRGRP
(group read):
>>> import stat
>>> oct(stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP)
'0640'
You can see each permission individually by displaying the octal number in binary form:
>>> bin(0640)
'0b110100000'
This breaks down as follows:
# USR
0b 110 100 000
# ^ user read (yes)
# ^ user write (yes)
# ^ user execute (no)
# GRP
0b 110 100 000
# ^ group read (yes)
# ^ group write (no)
# ^ group execute (no)
# OTH
0b 110 100 000
# ^ other read (no)
# ^ other write (no)
# ^ other execute (no)