我只是试图处理上传的文件并将其写入工作目录,其名称是系统时间戳。问题是我想用完全权限创建该目录(777)但我不能!使用以下代码片段,创建的目录具有755个权限。
def handle_uploaded_file(upfile, cTimeStamp):
target_dir = "path_to_my_working_dir/tmp_files/%s" % (cTimeStamp)
os.makedirs(target_dir, mode=0777)
任何人都可以帮助我吗?非常感谢。
答案 0 :(得分:34)
根据官方python documentation,os.makedirs
函数的mode参数在某些系统上可能被忽略,而在未被忽略的系统上,当前的umask值被屏蔽掉。
无论哪种方式,您都可以使用os.chmod
函数强制模式为0o777(0777引发语法错误)。
答案 1 :(得分:26)
您遇到了问题,因为os.makedir()尊重当前进程(see the docs, here)的umask。如果要忽略umask,则必须执行以下操作:
import os
try:
original_umask = os.umask(0)
os.makedirs('full/path/to/new/directory', desired_permission)
finally:
os.umask(original_umask)
在您的情况下,您希望desired_permission
为0777
(八进制,而不是字符串)。大多数其他用户可能想要0755或0770。
答案 2 :(得分:12)
对于Unix系统(当模式未被忽略时),首先使用当前用户的 umask 屏蔽提供的模式。您还可以修复运行此代码的用户的 umask 。然后,您不必调用os.chmod()
方法。
请注意,如果您不修复 umask 并使用os.makedirs
方法创建多个目录,则必须识别已创建的文件夹并对其应用os.chmod
。< / p>
对我来说,我创建了以下功能:
def supermakedirs(path, mode):
if not path or os.path.exists(path):
return []
(head, tail) = os.path.split(path)
res = supermakedirs(head, mode)
os.mkdir(path)
os.chmod(path, mode)
res += [path]
return res
答案 3 :(得分:0)
其他答案对我不起作用(使用 python 2.7)。
我之前必须添加 os.umask(0)
,以移除当前用户的掩码。我不得不将模式从 0777
更改为 0o777
:
def handle_uploaded_file(upfile, cTimeStamp):
target_dir = "path_to_my_working_dir/tmp_files/%s" % (cTimeStamp)
os.umask(0)
os.makedirs(path, mode=0o777)
答案 4 :(得分:-1)
如果要从终端运行脚本,只需使用sudo
sudo python your_script.py