【问题标题】:How can I make a directory with Python using default permissions?如何使用默认权限使用 Python 创建目录?
【发布时间】:2012-09-10 01:52:57
【问题描述】:

我想使用与 shell 的 mkdir 相同的权限在 Python 中创建一个目录。

standard Python documentation 说:

os.mkdir(路径[, 模式])

使用数字模式创建一个名为 path 的目录。默认模式 是 0777(八进制)。在某些系统上,模式被忽略。用在哪里, 当前的 umask 值首先被屏蔽掉。如果目录已经 存在,则引发 OSError。

我不想要默认的0777 权限,而是从父目录继承的权限。我可以不查询父目录的权限吗?

【问题讨论】:

    标签: python mkdir


    【解决方案1】:

    您已经正在获得与 shell 的 mkdir 相同的权限。

    带壳mkdir:

    对于每个 dir 操作数,mkdir 实用程序应执行与 IEEE Std 1003.1-2001 的系统接口卷中定义的 mkdir() 函数等效的操作,使用以下参数调用:

    dir 操作数用作路径参数。

    S_IRWXU、S_IRWXG 和 S_IRWXO 的按位或的值用作模式参数。 (如果指定了 -m 选项,模式选项参数将覆盖此默认值。)

    或者,更易读(来自 BSD 手册页):

    ...按照指定的顺序,使用当前 umask(2) 修改的模式 rwxrwxrwx (0777) 创建命名为操作数的目录。

    Python 的 os.mkdir 做同样的事情:

    ... [t]默认模式是 0777... 当前的 umask 值首先被屏蔽掉。

    实际上,Python 使用完全相同的参数调用 shell 文档中提到的完全相同的 POSIX mkdir 函数。该函数定义为:

    新目录的文件权限位应从模式初始化。 mode 参数的这些文件权限位应由进程的文件创建掩码修改。

    或者,更易读,来自 FreeBSD/OS X 手册页:

    目录路径由mode指定的访问权限创建,并受调用进程的umask(2)限制。

    如果您在 Windows 等非 POSIX 平台上,Python 会尝试模拟 POSIX 行为,即使本机 shell 有一个名为 mkdir 的命令工作方式不同。这主要是因为主要的此类 shell 是 Windows,它有一个 mkdir,它是 md 的同义词,而且就权限而言,它的作用细节甚至没有记录。

    【讨论】:

    • 简短的回答是:os.mkdir(somepath) 在 shell 中产生与 mkdir "$somepath" 相同的结果。
    • @J.F.Sebastian:感谢您指出我在给出完整答案之前遗漏了简短答案。已编辑。
    【解决方案2】:

    您似乎可以使用How can I get a file's permission mask? 获取您正在写入文件的目录的当前权限,然后将该模式传递给mkdir

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 2022-01-18
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      相关资源
      最近更新 更多