更改新目录和文件的权限模式
change permission mode for new directories and files
在python2.7中,我将数据保存到一个路径,例如A/B/C/data.txt
:
import os
file_path = 'A/B/C/data.txt'
# create directory A/B/C
dir_name = os.path.dirname(file_path)
if not os.path.exists(dir_name):
os.makedirs(dirp_name)
# save data to file
with open(file_path, 'w') as f:
json.dump(data, f)
# change file permission mode to be 0x666
os.chmod(file_path, 0666)
文件 data.txt
的权限模式已更改。但是,此代码不会更改路径上目录 A/B/C
的权限模式。我也想设置目录的权限模式
os.chmod('A', 0666)
os.chmod('A/B', 0666)
os.chmod('A/B/C', 0666)
有没有一种优雅的方式来做到这一点?
谢谢!
os.mkdir(path[, mode])
允许我们在创建目录的时候设置权限模式。默认模式是 0777(八进制)。如果该目录已经存在,则会引发 OSError。
解决方案 1:
# RW only permission mode is 0666 in python 2 and 0o666 in python 3
RW_only = 0666
# create directory A/B/C
dir_name = os.path.dirname(file_path)
if not os.path.exists(dir_name):
os.makedirs(dirp_name, RW_only)
# save data to file
with open(file_path, 'w') as f:
json.dump(data, f)
# change file permission mode to be 0x666
os.chmod(file_path, RW_only)
但是python3.7以后,mode
参数不再影响新建的中级目录的文件权限位,所以方案一只适用于旧版本。
这就是我最终得到的结果:使用过程 umask
解决方案 2 [更好]:
# mkdirs has mode 0777 by default, we get 0666 by masking out 0111
old_umask = os.umask(0111)
# create directory A/B/C
dir_name = os.path.dirname(file_path)
if not os.path.exists(dir_name):
os.makedirs(dirp_name)
# save data to file (file mode is 0666 by default)
with open(file_path, 'w') as f:
json.dump(data, f)
# restore old_umask
os.umask(old_umask)
在python2.7中,我将数据保存到一个路径,例如A/B/C/data.txt
:
import os
file_path = 'A/B/C/data.txt'
# create directory A/B/C
dir_name = os.path.dirname(file_path)
if not os.path.exists(dir_name):
os.makedirs(dirp_name)
# save data to file
with open(file_path, 'w') as f:
json.dump(data, f)
# change file permission mode to be 0x666
os.chmod(file_path, 0666)
文件 data.txt
的权限模式已更改。但是,此代码不会更改路径上目录 A/B/C
的权限模式。我也想设置目录的权限模式
os.chmod('A', 0666)
os.chmod('A/B', 0666)
os.chmod('A/B/C', 0666)
有没有一种优雅的方式来做到这一点?
谢谢!
os.mkdir(path[, mode])
允许我们在创建目录的时候设置权限模式。默认模式是 0777(八进制)。如果该目录已经存在,则会引发 OSError。
解决方案 1:
# RW only permission mode is 0666 in python 2 and 0o666 in python 3
RW_only = 0666
# create directory A/B/C
dir_name = os.path.dirname(file_path)
if not os.path.exists(dir_name):
os.makedirs(dirp_name, RW_only)
# save data to file
with open(file_path, 'w') as f:
json.dump(data, f)
# change file permission mode to be 0x666
os.chmod(file_path, RW_only)
但是python3.7以后,mode
参数不再影响新建的中级目录的文件权限位,所以方案一只适用于旧版本。
这就是我最终得到的结果:使用过程 umask
解决方案 2 [更好]:
# mkdirs has mode 0777 by default, we get 0666 by masking out 0111
old_umask = os.umask(0111)
# create directory A/B/C
dir_name = os.path.dirname(file_path)
if not os.path.exists(dir_name):
os.makedirs(dirp_name)
# save data to file (file mode is 0666 by default)
with open(file_path, 'w') as f:
json.dump(data, f)
# restore old_umask
os.umask(old_umask)