From 5ec4d804939c9909a81daf7b1d0b7bcdb72f0881 Mon Sep 17 00:00:00 2001 From: allegroai <> Date: Thu, 9 Apr 2020 12:31:43 +0300 Subject: [PATCH] Disconnect stdout/stderr logger on exit --- trains/backend_interface/logger.py | 11 ++++++++--- trains/logger.py | 3 +++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/trains/backend_interface/logger.py b/trains/backend_interface/logger.py index 9b0fcd70..e3c6a2a2 100644 --- a/trains/backend_interface/logger.py +++ b/trains/backend_interface/logger.py @@ -77,17 +77,17 @@ class StdStreamPatch(object): StdStreamPatch._stderr_proxy.connect(logger) @staticmethod - def remove_std_logger(): + def remove_std_logger(logger=None): if isinstance(sys.stdout, PrintPatchLogger): # noinspection PyBroadException try: - sys.stdout.connect(None) + sys.stdout.disconnect(logger) except Exception: pass if isinstance(sys.stderr, PrintPatchLogger): # noinspection PyBroadException try: - sys.stderr.connect(None) + sys.stderr.disconnect(logger) except Exception: pass @@ -172,6 +172,11 @@ class PrintPatchLogger(object): self._cur_line = '' self._log = logger + def disconnect(self, logger=None): + # disconnect the logger only if it was registered + if not logger or self._log == logger: + self.connect(None) + def __getattr__(self, attr): if attr in ['_log', '_terminal', '_log_level', '_cur_line']: return self.__dict__.get(attr) diff --git a/trains/logger.py b/trains/logger.py index a50435a9..dad54cac 100644 --- a/trains/logger.py +++ b/trains/logger.py @@ -735,6 +735,9 @@ class Logger(object): self._task_handler.flush() def _close_stdout_handler(self, wait=True): + # detach the sys stdout/stderr + StdStreamPatch.remove_std_logger(self) + if self._task_handler and DevWorker.report_stdout: t = self._task_handler self._task_handler = None