在/ var / lib中创建目录

时间:2019-05-17 20:45:03

标签: python permissions mkdir directory-permissions

我正在使用以下代码创建目录(如果不存在)和该目录中的文件:

import os

mystr = 'hello world!'
mypath = '/salam/me/'

if not os.path.exists(mypath):
    oldmask = os.umask(000)
    os.makedirs(mypath, 0755)
    os.umask(oldmask)

text_file = open(mypath + "myfile", "w")
text_file.write("%s" % mystr)
text_file.close()

但是我从控制台获得了IOError: [Errno 13] Permission denied。我关注了其他类似问题的答案,他们建议揭露并使用0755 / 0o755 / 0777 / 0o777

但是在这种情况下它们似乎不起作用。我在做什么错了?

后续问题:我想在/var/lib/中完成这项工作。会有所不同吗? (在设置权限方面)

注意,这是Python 2.7版

1 个答案:

答案 0 :(得分:3)

您需要以root用户身份运行脚本,因为父文件夹/var/lib由root拥有。不需要umask命令。

除此之外,我将像这样重写代码以避免出现竞争情况:

#!/usr/bin/env python3
import os

mystr = 'hello world!'
mypath = '/salam/me/'

try:
    os.makedirs(mypath, 0755)
except FileExistsError:
    print('folder exists')

text_file = open(mypath + "myfile", "w")
text_file.write("%s" % mystr)
text_file.close()

然后以root身份运行脚本:

sudo python3 my_script.py

PS:如果绑定到Python 2,则需要在上述解决方案中将FileExistsError替换为OSError。但是您必须另外检查errno

#!/usr/bin/env python2
import errno
import os

mystr = 'hello world!'
mypath = '/salam/me/'

try:
    os.makedirs(mypath, 0755)
except OSError as e:
    if e.errno == errno.EEXIST:
        print('folder exists')
    else:
        raise

text_file = open(mypath + "myfile", "w")
text_file.write("%s" % mystr)
text_file.close()