#python #bash #loguru
Вопрос:
У меня есть программа, которая запускает серию скриптов Python через скрипт Bash. Я использую loguru в скриптах Python и настраиваю файлы журналов с помощью отдельного logger_setup.py
. Это работает нормально, но мне нужно реализовать настройку в каждом скрипте Python через exec
, что стало громоздким для рефакторинга, например, когда скрипты Python перемещаются во вложенную папку.
Есть ли способ запустить настройку регистратора один раз в скрипте bash и быть распознанным всеми последующими вызовами Python?
Минимальный Рабочий Пример
my_bash_script.sh
:
#!/bin/bash
rm alt_logger.log
# python logger_setup.py # <-- this is the desired step, but does not work
python my_python_script.py
python another_python_script.py
my_python_script.py
:
from loguru import logger
exec(open("logger_setup.py").read()) # <-- I want to remove this
logger.info(f"Here I am writing to log.")
another_python_script.py
:
from loguru import logger
exec(open("logger_setup.py").read()) # <-- I want to remove this
logger.info(f"Another message to log.")
logger_setup.py
:
from loguru import logger
if __name__ == "__main__":
log_file = "alt_logger.log"
print(f"Setting up logger to stream to {log_file}")
logger.remove()
logger.add(
log_file,
colorize=True,
format="message}",
level="INFO",
)
Спасибо за любую помощь!
Комментарии:
1. Ваш план не сработает, как logger_setup.py изменяет переменные python. В вашем сценарии bash вам придется передавать эти переменные между отдельными вызовами python. Следующей лучшей (но все же ужасной) альтернативой было бы автоматическое выполнение настройки для каждого вызова python. Но почему вы вообще используете bash? Не могли бы вы написать один скрипт на python, который выполнял бы все остальные сценарии на python?
2. Спасибо. В программе есть и другие шаги, для которых, я думаю, имеет смысл использовать сценарий bash. Из интереса, не потребуется ли использовать единый скрипт python
exec
повсюду, что, как я думал, было не рекомендуется?
Ответ №1:
Как уже говорилось в комментариях, вы не можете использовать bash для этой цели (хорошо, вы можете создать установочный файл и объединить его со сценарием во временный файл, который будет выполнен, но, на мой взгляд, это было бы странным решением).
Я думаю, что единственный способ повторно использовать код для настройки ведения журнала-это рассматривать logger_setup.py
его как библиотеку:
#!/usr/bin/env python3
from loguru import logger
def loguru_setup(logfile = "alt_logger.log"):
logger.remove()
logger.add(
logfile,
colorize=True,
format="{message}",
level="INFO",
)
return logger
и загрузка этой библиотеки в каждый скрипт:
my_python_script.py:
#!/usr/bin/env python3
from logger_setup import loguru_setup
logger = loguru_setup()
logger.info(f"Here I am writing to log.")