【问题标题】:Python os.open() can not set umask to 777 (755 max)Python os.open() 无法将 umask 设置为 777(最大 755)
【发布时间】:2016-06-04 12:50:28
【问题描述】:

如果文件不存在,我的 python 脚本会创建一个文件,然后读取和写入该文件。该脚本可以由 root(自动)或用户(刷新请求)运行。我需要创建具有写入权限的文件,以便在这两种情况下都可以重写文件。

import os
f = os.open('file', os.O_CREAT, 0777)
os.close(f)

然后……

$ ls -l
-rwxr-xr-x 1 pi pi  0 Feb 22 13:51 file

但是,这个脚本有效,我不明白其中的区别:

import os  
f = os.open('file', os.O_CREAT)
os.fchmod(f, 0777)
os.close(f)

...然后:

$ ls -l
-rwxrwxrwx 1 pi pi  0 Feb 22 13:54 file

【问题讨论】:

  • 注意0777实际上是默认的mode
  • sudo python test.pypyhton test.py 的结果相同
  • @jonrsharpe,即使没有第三个参数,我仍然得到rwxr-xr-x (755)

标签: python file umask


【解决方案1】:

您不是在设置umask,而是在设置文件模式位,这些位被umask屏蔽Per the documentation:

打开文件file,根据flags设置各种flags 可能是根据模式的模式。默认模式为 0777(八进制), 并首先屏蔽掉当前的 umask 值。 ...

您的umask 值似乎是0022,因此屏蔽了组和其他用户的写入权限。

这个

os.fchmod(f, 0777)

尽管有umask 值,但仍将文件权限显式设置为0777

【讨论】:

  • ahhhhh 好的,谢谢,所以如果我总是想用 777 创建一个文件,那么在单行中,第三个参数应该是什么?
  • @pinhead - 要么将 umask 显式设置为零。请注意,设置umask 将影响您在流程中所做的一切。如果您运行的是单线程,这没什么大不了的,因为您可以将 umask 设置回来,但在多线程应用程序中可以。
  • @pinhead,除非您在带有 umask 000 的环境中运行(这很危险),否则作为单线器无法做到这一点
猜你喜欢
  • 2011-05-07
  • 2013-09-26
  • 2014-09-28
  • 2010-11-12
  • 1970-01-01
  • 2020-05-27
  • 2015-03-23
  • 2011-04-22
  • 1970-01-01
相关资源
最近更新 更多