2

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

标准的Python 文档说:

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

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

我不想要默认0777权限,而是从父目录继承的权限。我可以在不查询父目录权限的情况下做到这一点吗?

4

2 回答 2

7

您已经获得了与 shell 相同的权限mkdir

使用外壳mkdir

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

dir 操作数用作路径参数。

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

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

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

Pythonos.mkdir做同样的事情:

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

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

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

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

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

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

于 2012-09-17T20:06:26.160 回答
3

看起来您可能能够使用如何获取文件的权限掩码来获取您正在写入文件的目录的当前权限?然后将该模式传递给mkdir?

于 2012-09-17T20:03:42.590 回答