[英]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.