禁止进行小丑操作:

时间:2019-06-12 12:12:28

标签: python chown

主要问题是我还没有重新启动计算机,重新启动后,只要将权限移到一个组,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)

这同样失败,再次出现权限错误。

我刚摆脱想法,不知道该怎么办。也许可以立即将文件写入正确的用户吗?

2 个答案:

答案 0 :(得分:0)

可以随时执行chown的一个用户是root。我建议您以root用户(或使用sudo)启动程序/脚本。

chown也可以使用,当您要更改其权限的文​​件与您所在的组位于同一组时,或者如果两个组都链接在一起(请参阅/etc/groups,对不起,我不心底不懂语法)。

答案 1 :(得分:0)

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

import pwd
import grp
import os


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

奇怪的是,它不适用于我属于的所有组(通过重新启动计算机来解决此问题)