【发布时间】:2025-11-21 23:05:01
【问题描述】:
我有一个通过 Bash 脚本运行一系列 Python 脚本的程序。
我在 Python 脚本中使用loguru,并通过单独的logger_setup.py 设置日志文件。
这工作正常,但我需要通过exec 在每个 Python 脚本中实现设置,这对于重构来说变得很麻烦,例如当 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",
)
感谢您的帮助!
【问题讨论】:
-
您的计划将无法运行,因为 logger_setup.py 修改了 python 变量。在您的 bash 脚本中,您必须在各个 python 调用之间传输这些变量。下一个更好(但仍然很糟糕)的替代方案是为每个 python 调用自动运行设置。但是你为什么要使用 bash 呢?难道你不能编写一个执行所有其他 python 脚本的 python 脚本吗?
-
谢谢。程序中还有其他步骤,我认为使用 bash 脚本是有意义的。出于兴趣,统一的 python 脚本不需要在整个过程中使用
exec,我认为这是不鼓励的吗?