You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中配置Loguru使其对多个Python脚本全局生效

可行解决方案

由于每个Python进程是独立运行的,loguru的配置存储在进程内存中,无法跨进程传递,因此需要让每个启动的Python进程主动加载日志配置,我们可以通过Bash封装统一的Python调用入口实现这个需求,不需要修改业务Python脚本的核心逻辑,仅需少量调整:

步骤1:调整logger_setup.py

移除if __name__ == "__main__"判断,同时将日志路径改为绝对路径,避免不同层级的脚本调用时路径出错:

import os
from loguru import logger

# 日志文件和logger_setup.py放在同一目录,自动计算绝对路径
log_file = os.path.join(os.path.dirname(os.path.abspath(__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",
)

步骤2:修改Bash执行脚本

封装统一的Python执行函数,自动在启动脚本前加载日志配置:

#!/bin/bash
# 切换到当前Bash脚本所在目录,避免相对路径混乱
cd "$(dirname "${BASH_SOURCE[0]}")" || exit
rm -f alt_logger.log

# 封装Python调用函数,自动加载日志配置
run_python() {
    local target_script="$1"
    shift
    python -c "
import sys
import os
sys.path.insert(0, os.getcwd())
# 先加载日志配置
import logger_setup
# 传递命令行参数到目标脚本
sys.argv = ['$target_script'] + $*
# 执行目标业务脚本
exec(open('$target_script').read())
"
}

# 后续所有Python脚本都通过run_python调用即可
run_python my_python_script.py
run_python another_python_script.py

步骤3:清理业务Python脚本

直接删除所有Python脚本里的exec(open("logger_setup.py").read())这行代码即可,其余业务逻辑不需要修改。

如果你需要调用子目录里的Python脚本,直接传相对路径即可,比如run_python sub_dir/script.py,路径依然可以正常识别。

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:09:03