Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Bash运行Python脚本-如何重定向Python日志文件_Python_Logging_Python Logging - Fatal编程技术网

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

从Bash运行Python脚本-如何重定向Python日志文件,python,logging,python-logging,Python,Logging,Python Logging,我正在运行一系列来自bash脚本的python脚本 乙二醇 nohup python$IMPORTER\u PATH/IMPORTER.py-t styles-e$ELASTIC\u URL-j$styles\u DATA\u PATH-b-f&>“$LOG\u PATH/styles-$(日期“+%d-%b-%Y”).LOG” nohup python$IMPORTER\u PATH/IMPORTER.py-t objects-e$ELASTIC\u URL-j$objects\u DATA\

我正在运行一系列来自bash脚本的python脚本

乙二醇

nohup python$IMPORTER\u PATH/IMPORTER.py-t styles-e$ELASTIC\u URL-j$styles\u DATA\u PATH-b-f&>“$LOG\u PATH/styles-$(日期“+%d-%b-%Y”).LOG”
nohup python$IMPORTER\u PATH/IMPORTER.py-t objects-e$ELASTIC\u URL-j$objects\u DATA\u PATH-b-f&>“$LOG\u PATH/objects-$(日期“+%d-%b-%Y”).LOG”
目前,我正在使用
&>
我的python脚本中到处都是有用的打印语句,比如
print(“processstarted”)
,因此bash生成的日志文件确实有一些用处

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

下面是我的
importer.py
脚本的摘录:

import argparse
导入日志记录
def parse_参数(参数):
parser=argparse.ArgumentParser()
parser.add_参数(“-t”,“--type”,help=“要导入的数据类型”)
def总管(argv):
#设置日志记录级别
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('以%s开头,args)
现在的问题是无论bash脚本从何处运行,
importer.log
都会被创建,因为我已经设置了
filemode='w'
,所以在调用每个python脚本时,它都会被覆盖

是否有方法将importer.log的输出重定向到我的日期日志文件,如
“$log\u 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
您当然可以更改日期ecc的格式

您还可以使用以下选项:

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

谢谢,这很有帮助,重命名日志可以确保每个进程都有不同的日志。