Python получает отказ в доступе к файлу в Linux

У меня есть способ регистрировать действия в файле json:

def log(self, action, data):
    import json
    import os

    current_directory = os.path.dirname(os.path.realpath(__file__))

    try:
        with open(current_directory+'/logs/log_'+str(data['id'])+'.json', 'a+') as outfile:
            log_data = {
                str(datetime.today()): {
                    'action': action,
                    'data': data
                }
            }
            json.dump(log_data, outfile, indent=2)
    except Exception as e:
        print('\033[91m'+"Couldn't access log file to log changes in Reservation model: [{}]".format(str(e))+'\033[0m')
        print('Current directory is {}'.format(os.path.dirname(os.path.realpath(__file__))))

Он работает локально на моем Mac, но всегда возвращает permission denied на сервере Linux. Разрешения каталога журналы установлены на 755 с chmod, но я все равно получаю ту же ошибку:

[Wed Nov 28 16:27:23.551207 2018] [wsgi:error] [pid 18955:tid 139905951835904] [remote 189.149.229.31:63243] \x1b[91mCouldn't access log file to log changes in Reservation model: [[Errno 13] Permission denied: '/home/axel/IntellibookProject/Intellibook/ReservationsManagerApp/logs/log_43.json']\x1b[0m
[Wed Nov 28 16:27:23.551346 2018] [wsgi:error] [pid 18955:tid 139905951835904] [remote 189.149.229.31:63243] Current directory is /home/axel/IntellibookProject/Intellibook/ReservationsManagerApp

каталог logs существует? если не создать.

Jean-François Fabre 28.11.2018 17:54

Да, это так. Когда этого не происходит, я получаю другой код ошибки

HuLu ViCa 28.11.2018 17:54

как насчет разрешений на каталог журналов? вы можете создать внутри него файл вручную?

Jean-François Fabre 28.11.2018 18:00

@ Жан-Франсуа Фабр Да, я могу,

HuLu ViCa 28.11.2018 18:02

почему режим "а +"? попробуйте просто "а". И проверьте, не существует ли файл еще до записи в него. Возможно файл нельзя перезаписать

Jean-François Fabre 28.11.2018 18:05
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
895
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кто бы ни был пользователем, запускающим скрипт python, похоже, не хватает разрешений на доступ к каталогу - посмотрите, решит ли вашу проблему использование chown для установки владельца каталога.

Например: 'sudo chown -R someuser / path / to / the / directory'.

Параметр "-R" означает, что владельцем установлен каталог и все содержимое в нем.

В системах, подобных CentOS и RHEL, вам может потребоваться установить контекст SE Linux, чтобы разрешить запись в определенный каталог. Чтобы временно отключить SE Linux и проверить, не является ли это проблемой SE Linux, введите sudo setenforce 0 (применимо только к системам с SE Linux, таким как RHEL, CentOS, Fedora, Oracle Linux, SUSE, OpenSUSE и другие).

Другие вопросы по теме