【问题标题】:Loguru setup for use in bash script for use with several Python scripts用于 bash 脚本的 Loguru 设置,用于与多个 Python 脚本一起使用
【发布时间】: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,我认为这是不鼓励的吗?

标签: python bash loguru


【解决方案1】:

正如 cmets 中已经说明的那样,您不能为此目的使用 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.")

【讨论】:

    最近更新 更多