【问题标题】:Python mkdir giving me wrong permissionsPython mkdir 给了我错误的权限
【发布时间】:2010-12-10 06:38:38
【问题描述】:

我正在尝试创建一个文件夹并在其中创建一个文件。

每当我创建该文件夹(通过 Python)时,它都会创建一个文件夹,该文件夹根本没有给我任何权限并且是只读模式。

当我尝试创建文件时,我得到一个 IOError。

Error:  <type 'exceptions.IOError'>

我尝试创建(和搜索)所有其他模式的描述(0770 除外)。

谁能给我亮光?其他模式代码是什么?

【问题讨论】:

  • 您是否尝试在您无权访问的路径中创建文件?

标签: python windows filesystems mkdir


【解决方案1】:

创建文件夹后,您可以使用os.chmod 设置权限

mod是用base 8写的,如果你把它转换成二进制它会是

000 111 111 000
    rwx rwx rwx

第一个rwx是所有者,第二个是组,第三个是世界

r=读取,w=写入,x=执行

您最常看到的权限是
7 读/写/执行 - 您需要执行目录才能看到内容
6 读/写
4 只读

当您使用os.chmod 时,使用八进制表示法最有意义 所以

os.chmod('myfile',0o666)  # read/write by everyone
os.chmod('myfile',0o644)  # read/write by me, readable for everone else

记住我说过你通常希望目录是“可执行的”,这样你就可以看到内容。

os.chmod('mydir',0o777)  # read/write by everyone
os.chmod('mydir',0o755)  # read/write by me, readable for everone else

注意:0o777 的语法适用于 Python 2.6 和 3+。否则对于 2 系列,它是 0777。 2.6 接受任一语法,因此您选择的语法取决于您是要向前兼容还是向后兼容。

【讨论】:

  • 也给那家伙举个例子,它可能会与 *nix chmod 混淆。
  • 通常,八进制由 0666、0444...表示,而不是 0o666 表示法。
  • @Jonathan,这是 Python3 中的语法错误。首选 0oNNN 表示法,因为它更明确。 0oNNN 适用于 Python2 和 Python3
  • 0oNNN 适用于≥2.6。 0NNN 适用于
  • @ephemient 感谢您的澄清
【解决方案2】:

你可能有一个时髦的 umask。在创建目录之前尝试os.umask(0002)

【讨论】:

  • umask 为 777 将确保所有权限位为零。您的意思可能是 000;使用 002 或 022 可能更明智。
【解决方案3】:

Python 手册说:

os.mkdir(path[, mode])

使用数字模式创建一个名为 path 的目录。默认模式为 0777(八进制)。在某些系统上,模式被忽略。在使用它的地方,当前的 umask 值首先被屏蔽掉。可用性:Unix、Windows。

您是否指定了一种模式 - 您指定了哪种模式。您是否考虑过明确指定模式?而程序的umask值设置成什么”

【讨论】:

    【解决方案4】:

    由于您在 Windows 上,这可能是一个废话。确保父目录上没有任何古怪的特殊权限,或者使用定义由您的帐户创建的任何目录获得的权限的策略设置。我怀疑这是一个 python 问题,因为我无法在 Windows 上使用相对普通的 Vista 安装重新创建问题。

    【讨论】:

      猜你喜欢
      • 2016-03-21
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 2019-10-28
      • 1970-01-01
      相关资源
      最近更新 更多