gpt4 book ai didi

python - 如何在保留现有权限的同时使用 os.chmod 更改文件权限?

转载 作者:行者123 更新时间:2023-11-28 18:03:52 26 4
gpt4 key购买 nike

我试图一次有选择地修改用户、组或其他人的权限,但每当我使用 chmod 时,所有权限都会被覆盖。


我已经尝试按照 chmod 文档中的建议将当前文件权限与新权限组合在一起:

例如:

GROUP_RO = S_IRGRP #Group read only
current_permissions = stat.S_IMODE(os.stat(path).st_mode)

os.chmod(path, current_permissions | GROUP_RO)

我也试过使用位掩码。我想不出一种方法将位掩码组合到哪里 - 如果我正在修改用户权限,我可以保护/屏蔽组和其他权限不被修改。

我试过以下列方式使用位掩码:

GROUP_RO = S_IRGRP #Group read only
USER_MASK = S_IRWXU

os.chmod(path, USER_MASK | GROUP_RO) #this works at preventing User permissions from being modified

但是将多个面具连接在一起不会:

USER_MASK = S_IRWXU
OTHERS_MASK = S_IRWXO

os.chmod(path, USER_MASK | OTHERS_MASK | GROUP_RO) #does not work

我尝试了无数种不同的位运算符和位掩码的组合,有或没有当前权限,但没有成功。


我希望能够做什么:

# current permissions -> U: read only, G: read and write, O: write only
os.chmod(path, [whatever code making this work])
# new permissions -> U: read only, G: read only, O: write only

在任何情况下,其他实体都不会被修改。

最佳答案

您的所有尝试都非常接近。问题是 | 运算符无法关闭位。所以当你做 current_permissions | S_IRGRP,您正在设置正确的位,但您没有关闭写权限。

要关闭位,您需要&。有几种好方法可以做到这一点。

我会选择的一个可能是取消设置所有组权限,并将它们设置为您想要的:

(current_permissions & ~S_IRWXG) | S_IRGRP

第一部分取消所有组权限,第二部分像以前一样应用只读模式。

另一种方法是禁用除用户和其他部分之外的所有内容,然后设置组:

(current_permissions & (S_IRWXU | S_IRWXO)) | S_IRGRP

这两者通常是等效的,除非您在权限中设置了一些奇怪的位。

关于python - 如何在保留现有权限的同时使用 os.chmod 更改文件权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54661554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com