不允许进行 Chown 操作:

Chown Operation not permitted:

主要问题是我还没有重启电脑,重启后,os.chownshutil.chown等命令只要移动权限就可以了我也是

成员的群组

我从 api 下载了一个 zip 文件并使用以下方法保存:

with urllib.request.urlopen(req) as response, \
        open(out_folder, 'wb') as out_file:
    shutil.copyfileobj(response, out_file)

我想允许其他用户访问此文件。但是,我一直无法这样做。我试过:

process = subprocess.Popen(['chown', '-R', f"{user}:{user}", out_folder],
                           stdout=subprocess.PIPE)
process.communicate()

每个告诉我该操作不被允许的语句都失败了。

接下来,我尝试将 sudo 添加到命令列表中,但这只会导致 process.communicate() 行永远挂起。

接下来,我尝试了:

shutil.chown(out_folder, user=user)

这也没有用。我想如果我把它写到我和其他用户都属于的共享组,也许它会起作用:

shutil.chown(out_folder, group=shared_group)

这也失败了,同样是权限错误。

我没有想法,不知道该怎么办。是否可以立即将文件写入正确的用户?

随时可以执行 chown 的用户是 root。我建议您以 root 用户(或使用 sudo)的身份启动 program/script。

chown 也可以使用,当您要更改其权限的文​​件与您在同一组中时,或者,如果两个组都已链接(请参阅 /etc/groups,抱歉我不太清楚语法)。

我找到了可行的解决方案:

import pwd
import grp
import os


uid = pwd.getpwnam(usernmae).pw_uid    
gid = grp.getgrnam(groupname).gr_gid
os.chown(out_folder, uid, gid)

奇怪的是,它并不适用于我所属的所有群组(这已通过重新启动我的计算机解决)