2024-06-26 17:39:45 发布
网友
我只是试图处理一个上传的文件并将其写入一个名为系统时间戳的工作目录。问题是我想用完全权限(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)
有人能帮我吗?非常感谢。
对于Unix系统(不忽略该模式时),首先使用当前用户的umask对提供的模式进行屏蔽。您还可以修复运行此代码的用户的umask。然后就不必调用os.chmod()方法了。 请注意,如果不修复umask并使用os.makedirs方法创建多个目录,则必须标识已创建的文件夹并对其应用os.chmod。
os.chmod()
os.makedirs
os.chmod
我为自己创建了以下函数:
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
根据官方的pythondocumentation,在某些系统上,os.makedirs函数的mode参数可能会被忽略,在不被忽略的系统上,当前umask值会被屏蔽。
不管怎样,都可以使用os.chmod函数强制模式为0o777(0777抛出语法错误)。
您遇到了问题,因为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。
desired_permission
0777
对于Unix系统(不忽略该模式时),首先使用当前用户的umask对提供的模式进行屏蔽。您还可以修复运行此代码的用户的umask。然后就不必调用
os.chmod()
方法了。 请注意,如果不修复umask并使用os.makedirs
方法创建多个目录,则必须标识已创建的文件夹并对其应用os.chmod
。我为自己创建了以下函数:
根据官方的pythondocumentation,在某些系统上,
os.makedirs
函数的mode参数可能会被忽略,在不被忽略的系统上,当前umask值会被屏蔽。不管怎样,都可以使用
os.chmod
函数强制模式为0o777(0777抛出语法错误)。您遇到了问题,因为os.makedir()尊重当前进程(see the docs, here)的umask。如果要忽略umask,则必须执行以下操作:
在您的例子中,您希望
desired_permission
是0777
(八进制,而不是字符串)。大多数其他用户可能需要0755或0770。相关问题 更多 >
编程相关推荐