Открытие Python и «отказано в разрешении» для файла с ugo + rw? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть скрипт на машине RHEL 7.x, написанный на Python3. При тестировании этого скрипта я создал функцию, которая будет добавлять текстовый файл в тот же каталог.

Если я выполняю скрипт из локального каталога, т.е. - ./pyscript.py, все работает как положено.

Но я пытаюсь выполнить это из скрипта Bash на пару каталогов выше, и, похоже, он работает неправильно. Другие функции в сценарии будут выполняться, но эта самая последняя, ​​которая добавляется в текстовый файл, не будет.

Теперь, если я запускаю скрипт как пользователь, которому он принадлежит (и txt-файл) из моего домашнего каталога, скрипт выдает ошибку с ошибкой разрешения. НО, если я запускаю скрипт с sudo, он заканчивается без ошибки, однако он НЕ записывает в текстовый файл.

Мой пользователь имеет права RW для каждого каталога между сценарием bash и сценарием python.

Любые мысли о том, почему запуск sudo или локальный пользователь не позволяют мне писать в текстовый файл ??

Редактировать

Traceback (most recent call last):
  File "ace/ppod/my_venv/emergingThreats/et_pro_watchlists.py", line 165, in <module>
    with open('etProLog.txt', 'a') as outlog:
PermissionError: [Errno 13] Permission denied: 'etProLog.txt'

1 Ответ

2 голосов
/ 25 апреля 2019

Если вы используете open("filename.txt", 'mode'), он откроет этот файл в каталоге, из которого скрипт выполняется , не относительно текущего каталога скрипта.Если вы хотите указать путь к каталогу, в котором находится скрипт, импортируйте модуль os и используйте open(os.path.dirname(os.path.abspath(__file__))+"filename.txt").Ошибка разрешения связана с тем, что файл не существует;sudo отменяет это, но ничего не делает, потому что файл не существует.

...