使用os.path.join在错误的位置创建日志文件

时间:2018-11-12 19:59:27

标签: python

我正在尝试在目录patchsetcreatedlogs下创建日志文件,但是使用以下代码将日志文件创建为patchsetcreatedlogspatchset_created_hook_log_11122018_114810.txt

我希望filw patchset_created_hook_log_11122018_114810.txtpatchsetcreatedlogs下创建,我哪里出错了?

import time,os,logging
# setup logging
patchsetcreatedlog = 'patchset_created_hook_log_' + time.strftime("%m%d%Y") + '_' + time.strftime("%H%M%S") + '.txt'
log = os.path.join(os.path.dirname(os.path.realpath(__file__)),'patchsetcreatedlogs' + patchsetcreatedlog)
logger = logging.getLogger(__name__)
#logger.setLevel(logging.DEBUG)
logger.setLevel(10)
ch = logging.StreamHandler()
#ch.setLevel(logging.DEBUG)
ch.setLevel(10)
formatter = logging.Formatter('%(asctime)s %(filename)-15s %(funcName)-20s %(lineno)-5s  %(levelname)-8s: %(message)s', datefmt="%Y-%m-%d %H:%M:%S")
ch.setFormatter(formatter)
logger.addHandler(ch)

fh = logging.FileHandler(log, 'w')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)

patchsetcreatedlogspatchset_created_hook_log_11122018_114810.txt

1 个答案:

答案 0 :(得分:2)

os.path.join并不是问题,只是这样做:

'patchsetcreatedlogs' + patchsetcreatedlog

您要添加2个字符串,而不是将它们传递到join的参数中(可以接受任意数量的参数,而不仅仅是2个)。因此,没有添加路径分隔符。

此外,这里不需要os.path.realpath。模块的路径是简单路径或名称。因此,只需将其删除。

os.path.join(os.path.dirname(os.path.realpath(__file__)),'patchsetcreatedlogs' + patchsetcreatedlog)

应为:

os.path.join(os.path.dirname(__file__),'patchsetcreatedlogs', patchsetcreatedlog)

(如果__file__只是文件名,dirname返回一个空字符串,而join则忽略它,因此它仍然可以工作)