繁体   English   中英

从 Bash 运行 Python 脚本 - 如何重定向 Python 日志文件

[英]Running Python Script from Bash - How to Redirect the Python Logging File

我正在从 bash 脚本运行一系列 python 脚本。

例如

nohup python $IMPORTER_PATH/importer.py -t styles -e $ELASTIC_URL -j $STYLES_DATA_PATH  -b -f &>> "$LOG_PATH/styles-$(date "+%d-%b-%Y").log"
nohup python $IMPORTER_PATH/importer.py -t objects -e $ELASTIC_URL -j $OBJECTS_DATA_PATH  -b -f &>> "$LOG_PATH/objects-$(date "+%d-%b-%Y").log"

目前,我正在使用&>>成功生成标准输出和标准错误的日志print("Process started") .

但是,我最近一直在清理我的日志文件并使用 python logging模块来生成更集中的日志文件。

这是我的importer.py脚本的摘录:

import argparse
import logging

def parse_args(args):
    parser = argparse.ArgumentParser()
    parser.add_argument("-t", "--type", help="Type of data to import")

def main(argv):
    # Set up Logging levels
    logging.basicConfig(filename='importer.log',
                        filemode='w', level=logging.INFO)
    es_log = logging.getLogger("elasticsearch")
    es_log.setLevel(logging.WARNING)

    args = parse_args(argv)
    logging.info('Started with %s', args)

现在的问题是importer.log是在运行 bash 脚本的任何地方创建的,并且因为我设置filemode='w' ,它会在调用每个 python 脚本时被覆盖。

有没有办法让我将 output 从 importer.log 重定向到我的日期日志文件,例如"$LOG_PATH/styles-$(date "+%d-%b-%Y").log"

或者我应该向我的 importer.py ArgumentParser 添加另一个参数并将目标路径和文件名传递给它?

您可以根据需要格式化日志文件的名称。 这是一个例子:

from datetime import datetime
log_name = f"importer_{datetime.strftime(datetime.now(), '%Y-%m-%d')}.log"
# This becomes: importer_2020-11-27.log

您当然可以更改日期电子表格的格式...

你也可以使用这个:

import os
script_path = os.path.realpath(__file__)
# This points to your script: /path/to/script.py

如果要在此处保存日志,请获取脚本的路径。

log_name = os.path.join(os.path.dirname(script_path), log_name)
# now together with the first snippet of code you get: /path/to/importer_2020-11-27.log

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM