Python запускается перед любым скриптом
В Python есть похожая вещь, как atexit. Атексит предназначен для использования "срывать". Мне нужно что-то вроде "настроить". Что перед выполнением любого сценария, который я запускаю, этот setUp будет выполнен.
РЕДАКТИРОВАТЬ
Я должен был указать, что у меня есть несколько маленьких сценариев, которые я выполняю отдельно. Все эти скрипты связаны с одной и той же логикой. Я хотел бы внедрить внедрение зависимостей в наш проект, но, например, python-inject необходимо настроить перед запуском каждого скрипта. Я не хочу сушить себя, устанавливая в начале всех сценариев одинаково inject.configure(myConfiguration)
просто чтобы все это настроить.
Теперь я посмотрю предложение @en_Knight о PYTHONSTARTUP и вернусь снова.
РЕШЕНИЕ То, что @en_Knight предложил о PYTHONSTARTUP, сработает наверняка. Хотя у меня есть вся сила развертывания:] Я чувствую, что это тоже не очень хорошая идея. Я решил свою проблему, модифицируя исходники Python-Inject
Спасибо за помощь!
1 ответ
Обратите внимание, что когда вы используете atexit, вам сначала нужно зарегистрировать функцию. Я бы порекомендовал сделать что-то похожее для обеспечения функциональности "atenter".
Например
# start of my code
atenter() # place 1
def main():
atenter() # place 2
# run main code
if __name__ == '__main__':
atenter() # place 3
main()
Место 2 кажется подходящим местом в большинстве случаев. Недостаток места 1 в том, что любой файл, который импортирует вашу основную функцию, будет случайно вызывать atenter. Это также вызовет проблемы при многопроцессорной обработке на некоторых платформах. Что делать, если __name__ == "__main__": делать?
Проблема с местом 3 заключается в том, что если вы поместите оболочку (например, утилиту командной строки "RunExamples" или GUI) поверх основной функции в другом файле, atenter не будет вызываться. Вероятно, достаточно указать в документации, что main не следует вызывать дважды, хотя это также может быть применено.
Если вы ищете что-то более элегантное, вы можете создать декоратор "atenter" и обернуть им основные функции. Используя шаблон синглтона или что-то подобное, вы можете убедиться, что он выполняется только один раз, независимо от того, сколько раз он вызывается
Есть альтернативный подход. Из документов Python
PYTHONSTARTUP
Если это имя читаемого файла, команды Python в этом файле выполняются до отображения первого приглашения в интерактивном режиме. Файл выполняется в том же пространстве имен, где выполняются интерактивные команды, так что объекты, определенные или импортированные в нем, могут использоваться без квалификации в интерактивном сеансе. Вы также можете изменить подсказки sys.ps1 и sys.ps2 в этом файле.
Изменение этой переменной среды позволит вам выполнить функцию при указанных обстоятельствах. Это не очень хорошая стратегия развертывания (она зависит от нескольких условий, которые выполняются на вашем локальном компьютере, включая режим, в котором работает python). Тем не менее, он может более точно соответствовать тому, что вы ищете, и может быть выполнимым, если у вас есть сильный контроль над средой Python при развертывании.