Модуль 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 настолько важен, чтобы получить правильный результат?

627   3  

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

    Ничего не найдено.