主要问题是我还没有重新启动计算机,重新启动后,只要将权限移到一个组,os.chown
,shutil.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)
这同样失败,再次出现权限错误。
我刚摆脱想法,不知道该怎么办。也许可以立即将文件写入正确的用户吗?
答案 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)
奇怪的是,它不适用于我属于的所有组(通过重新启动计算机来解决此问题)