Создать каталог в / var / lib - PullRequest
1 голос
/ 17 мая 2019

Я использую следующий код для создания каталога (если он не существует) и файла внутри этого каталога:

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 Ответ

3 голосов
/ 17 мая 2019

Вам необходимо запустить скрипт от имени пользователя 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()
...