对于批量任务,我创建了几个ProgressLog
对象的实例,无论是否存在任何错误,每个实例都会创建一个空的日志文件。防止这种情况的最佳方法是什么?
class ProgressLog(object):
"""Write a message to log + progress indicator.
"""
total = 0
def __init__(self, name):
source_path, file_name = os.path.split(name)
self.name = file_name
self.source_path = source_path
self.log_dir_name = r'log'
self.make_log_dir(self.source_path, self.log_dir_name)
self.reset()
log_file = self._logfilename()
try:
self.f = open(log_file, 'w')
print('\n***logging errors to {0}***\n'.format(log_file))
except IOError, err:
msg = 'Cannot open logfile {0}. Traceback is: {1}'.format(
log_file, err)
raise msg
def _logfilename(self):
## hms_ddmmyyyy format
log_name = r'{1}_{0}{2}_errors.csv'.format(
time.strftime("%I%M%S"),
time.strftime("%d%m%Y"),
self.name)
return os.path.join(self.source_path, self.log_dir_name, log_name)
答案 0 :(得分:2)
没有"魔法"要做到这一点,你只需要重构代码,只在第一次实际调用日志时打开日志文件。
要实现此目的,请将打开日志文件的__init__
部分提取到单独的_open_log
方法中。在__init__
初始化self.f
到None
。然后,您的实际日志记录方法可以从以下开始:
if self.f is None:
self._open_log()