Модуль Python os.chmod (file, 664) не изменяет разрешение на rw-rw - r-but-w--wx----
недавно я использую Python module os, когда я попытался изменить разрешение файла, я не получил ожидаемого результата. Например, я намеревался изменить разрешение на rw-rw-r--,
os.chmod("/tmp/test_file", 664)
разрешения собственности фактически -Вт--свойства--- (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 настолько важен, чтобы получить правильный результат?
3 ответов:
нашел это на форум
Если вам интересно, почему этот ведущий ноль важен, это потому, что разрешения устанавливаются как восьмеричное целое число, а Python автоматически рассматривает любое целое число с ведущим нулем как восьмеричное. Итак, ОС.chmod ("файл", 484) (в десятичной системе счисления) даст тот же результат.
то, что вы делаете, проходит
664которых в восьмеричной системе счисления имеет вид1230в вашем случае вам понадобится
os.chmod("/tmp/test_file", 436)
[Update] Примечание, для Python 3 у вас есть префикс с 0o (ноль oh). Например,
0o666
Так что для людей, которые хотят семантика аналогична:
$ chmod 755 somefileв python 2:
$ python -c "import os; os.chmod('somefile', 0755)"в python 3:
$ python3 -c "import os; os.chmod('somefile', 0o755)"
ведущая "0" означает, что это восьмеричная константа, а не десятичная. и вам нужно восьмеричное изменить режим.
разрешения-это битовая маска, например, rwxrwx--- это 111111000 в двоичном формате, и очень легко группировать биты по 3 для преобразования в восьмеричное, чем вычислять десятичное представление.
0644 (восьмеричный) - 0.110.100.100 в двоичном формате (я добавил точки для удобства чтения), или, как вы можете вычислить, 420 в десятичном.
Comments