Python:创建一个具有777权限的目录。

5
我正在编写一个程序,使用os.makedirs("foo")创建一个文件夹。但是当我在Windows 10文件资源管理器中右键单击新创建的文件夹时,我发现没有管理员权限无法删除该文件夹。 那么,如何创建一个具有递归删除权限的文件夹?
我使用以下命令来创建该目录:os.makedirs("data/base/{}".format(args[0].text), mode=0o777) 我使用以下命令来删除该目录:
def delete_class(self, *args):
        for root, dirs, files in os.walk("data/base/{}".format(self.clicked_class_to_delete.id), topdown=False):
            for name in files:
                filename = os.path.join(root, name)
                os.chmod(filename, stat.S_IWUSR)
                os.remove(filename)
            for name in dirs:
                os.rmdir(os.path.join(root, name))
        shutil.rmtree("data/base/{}".format(self.clicked_class_to_delete.id)

)

4个回答

11

在执行 os.makedir 前,或许需要执行 os.umask(0) 来移除当前用户的掩码。


谢谢,这解决了我的问题!你能否详细解释一下 os.umask(0) 到底是做什么的?我在文档中找了一下,但有点迷糊... - Tropilio
简单来说,用户掩码(umask)限制了程序可以设置的权限。设置umask(0)会删除此属性,因此程序设置的任何权限都将直接反映出来。在我的情况下,除非我这样做,否则我的celery工作程序无法写入主程序创建的文件夹。 - Garvit Jain
@GarvitJain,你的解决方案很好并且有效。我注意到出于某种原因,我可以在bash shell中执行mkdir --mode=0777 hello命令,并且这个shell命令可以正常工作。所以,以某种方式使用shell的mkdir命令可以工作,但是Python的os.mkdir却不行。 - Trevor Boyd Smith

10

从文档中可以得知:

os.makedirs(name, mode=0o777, exist_ok=False)

你可以在这里找到文档。


注:该函数用于创建目录,在创建时可以指定权限和是否允许已存在的目录覆盖。

我更新了我的主题并提供了更多的细节,问题仍然存在。 - Mike Delta
@MikeDelta,只是为了确认 - 你能够使用你添加的代码段创建并删除文件夹,但是你不能在没有管理员权限的情况下“手动”删除它。我是对的吗? - Mixhab
有时我无法从文件资源管理器中删除它,但通常我的解释器会出现错误,如“操作系统错误:权限被拒绝”或“错误:文件非空”或类似的内容。 - Mike Delta
@MikeDelta 试着定位问题所在。下次出现错误时,请检查文件夹是否真的为空。需要了解哪些命令未能正确执行。您可以仅使用第一个“for”循环运行代码几次,以查看每次是否正确执行。然后添加第二个“for”循环。然后再添加“shutil.rmtree”。 - Mixhab

6

只需执行以下操作:

os.makedirs(name,0777)

我已经编辑了我的主题并添加了更多的细节,但问题仍然存在。 - Mike Delta
这个不起作用。您可以按照此答案操作:https://dev59.com/6m435IYBdhLWcg3wvy6_#67723702 - veben

1

以时间戳为基础的目录。具有完全的权限。

now = datetime.datetime.now().strftime("%y%m%d%H%M")
dirName = "/var/name-{}".format(now)
os.umask(0)
os.makedirs(dirName,mode=0o777)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接