在/var/lib中创建一个目录

Ari*_*deh 2 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()
Run Code Online (Sandbox Code Playgroud)

但我IOError: [Errno 13] Permission denied从控制台得到。我遵循了其他类似问题的答案,他们建议取消屏蔽并使用0755///0o75507770o777

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

后续问题:我想在/var/lib/. 会有所不同吗?(在设置权限方面)

注意这是 Python 版本 2.7

hek*_*mgl 5

您需要以 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()
Run Code Online (Sandbox Code Playgroud)

然后以 root 身份运行脚本:

sudo python3 my_script.py
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)