У меня есть среда разработки и производство для запуска различных Python
сценариев, используемых в crontab
.
В среде разработчиков я обычно тестирую сценарии из командной строки в каталоге сценариев, например "python myscript.py"
.Теперь некоторые скрипты загружают конфигурацию из JSON
файлов в том же или подкаталоге каталога скриптов.Поэтому в dev я могу ссылаться на файл так:
printconf = Config('printing.json')
Однако, как только сценарий готов к работе, он помещается в crontab
, а crontab
вызывает сценарии из root
, следовательно, ломая вышеуказанную строку.
Кроме того, dev и production явно находятся в разных местах файловой системы, поэтому я даже не могу использовать абсолютные пути, потому что они не будут одинаковыми.
Как описано в Как найти каталог скрипта с помощью Python? , я могу использовать различные методы для поиска файла текущего каталога.Однако они означают дополнительную обработку, и мне было интересно, может ли какая-либо версия Python
иметь (или могла бы запланировать) какой-либо дополнительный встроенный способ сообщить, что файл должен быть найден относительно каталога запущенного скрипта?Что-то вроде __location__
?
По сути, то, что будет работать для ссылок на файлы, таких как импорт модулей, уже делает.
Кроме того, я попытался добавить глобальную переменную __location__
через sitecustomize.py
, но это даже не работает.
sitecustomize.py:
if '__file__' in globals():
import os
_location_ = os.path.join(os.getcwd(), os.path.dirname(__file__))
Но это тоже не работает, потому что: - __location__
не передается в сценарий, - и __file__
относится к sitecustomize.py