Как получить абсолютный путь на Linux при запуске из другого места - PullRequest
2 голосов
/ 17 июня 2019

Я хочу запустить crontab, который будет запускать мой файл каждый час в 0 минут.У меня (sudo) crontab настроен с помощью одной команды следующим образом:

0 * * * * /usr/bin/python3 /usr/folder/test.py

crontab запущен и, насколько я могу судить, является правильным, но мой файл python не возвращает абсолютный путь, когдафайл запускается из другого места.

Мне нужен способ гарантировать абсолютный путь к этому текстовому файлу при доступе к нему из корня, чтобы мой crontab мог запустить файл.

Я пытался использовать и Path(filename).resolve(), и os.path.abspath(filename), но ни один из них не работает.

import os
print(os.path.abspath("checklist.txt"))
python3 usr/folder/test.py

Когда я запускаю файл "test.py" в папке, я получаюожидаемый вывод

python3 test.py

/ usr / folder / checklist.txt

, однако, когда я запускаю тот же файл из корня идоступ к нему по пути Я получаю другой результат, что делает невозможным использование crontab в этом контексте

python3 usr / folder / test.py

/ checklist.txt

Ответы [ 2 ]

6 голосов
/ 17 июня 2019

Если checklist.txt находится в той же папке, что и ваш скрипт test.py, то вы можете использовать переменную __file__, чтобы получить правильный путь. Например

# The directory that 'test.py' is stored
directory = os.path.dirname(os.path.abspath(__file__))
# The path to the 'checklist.txt'
checklist_path = os.path.join(directory, 'checklist.txt')
2 голосов
/ 17 июня 2019

__ file__ атрибут

import os
filename = 'checklist.txt'
abs_path_to_file = os.path.join(os.path.dirname(__file__), filename)

Системный модуль

import os, sys
filename = 'checklist.txt'
abs_path_to_file = os.path.join(os.path.dirname(sys.argv[0]), filename)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...