Как сдвинуть бит Python, чтобы манипулировать восьмеричной файловой системой - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть восьмеричное значение Linux для доступа к файлам. Разрешения в настоящее время, IE 0o640, и я хочу установить бит группы 6 (так что 0o660). Я видел, что я могу установить бит в n-м месте здесь , но результаты, которые я получаю, являются своеобразными, я думаю, что это из-за восьмеричного представления.

Я пробовал:

perm = 0o640
# Set the bit in the 2nd place (index 1) to 6. 
new_perm = perm | (6<<1)
# new_perm is now 0o634 (wanted 0o660).

Я делаю что-то не так, я думаю ...

Мне также интересно, в чем преимущество использования восьмеричных вместо обычных целых чисел в Python при работе с правами доступа к файлу.

Спасибо!

1 Ответ

3 голосов
/ 18 апреля 2020

<< сдвиг числа на бит. для ответа, который вы хотите, вы должны сдвинуть 0o600 на 3.

perm = 0o600
new_perm = (perm  & 0o707) | (6<<3)
print(new_perm == 0o660) # True

В соответствии с комментарием мы должны сначала сделать биты, которые мы хотим обнулить, а затем использовать |.

(perm & 0o707) Эта часть кода делает то, что происходит.

...