簡體   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