Skip to content
This repository has been archived by the owner on Sep 24, 2020. It is now read-only.

Commit

Permalink
Windows console logging fix (#170)
Browse files Browse the repository at this point in the history
* fix windoows console logging

* format

* fix

* py27

* dont overwrite user val

* update env var in curr process

* cleanup

* fallback

* py27

* Dont set env var in setup.py

* rem unused import

* refac

* py27

* refac

* cleanup

* codemod fix

* rem prn

Co-authored-by: Jeff Raubitschek <jeff@wandb.com>
  • Loading branch information
farizrahman4u and raubitsj committed Aug 31, 2020
1 parent a186e2a commit 587e630
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 8 deletions.
7 changes: 7 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from setuptools import setup


with open('package_readme.md') as readme_file:
readme = readme_file.read()

Expand Down Expand Up @@ -77,3 +78,9 @@
'grpc': grpc_requirements,
}
)

# if os.name == "nt" and sys.version_info >= (3, 6):
# legacy_env_var = "PYTHONLEGACYWINDOWSSTDIO"
# if legacy_env_var not in os.environ:
# if os.system("setx " + legacy_env_var + " 1") != 0:
# raise Exception("Error setting environment variable " + legacy_env_var)
21 changes: 17 additions & 4 deletions wandb/lib/redirect.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,17 @@ def _redirect(self, to_fd, unbuffered=False, close=False):
setattr(sys, self._stream, Unbuffered(getattr(sys, self._stream)))

def install(self):
if self._installed:
return

if os.name == 'nt' and sys.version_info >= (3, 6):
legacy_env_var = 'PYTHONLEGACYWINDOWSSTDIO'
if legacy_env_var not in os.environ:
msg = "Set %s environment variable to enable"\
" console logging on Windows." % legacy_env_var
logger.error(msg)
raise Exception(msg)

logger.info("install start")

fp = getattr(sys, self._stream)
Expand All @@ -142,10 +153,12 @@ def install(self):
logger.info("install stop")

def uninstall(self):
logger.info("uninstall start")
self._redirect(to_fd=self._old_fp.fileno(), close=True)
self._dest._stop()
logger.info("uninstall done")
if self._installed:
logger.info("uninstall start")
self._redirect(to_fd=self._old_fp.fileno(), close=True)
self._dest._stop()
self._installed = False
logger.info("uninstall done")


class Capture(object):
Expand Down
2 changes: 1 addition & 1 deletion wandb/sdk/wandb_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -886,7 +886,7 @@ def _redirect(self, stdout_slave_fd, stderr_slave_fd):
self._out_redir = out_redir
self._err_redir = err_redir
logger.info("Redirects installed.")
except (OSError, AttributeError) as e:
except Exception as e:
print(e)
logger.error("Failed to redirect.", exc_info=e)
return
Expand Down
12 changes: 11 additions & 1 deletion wandb/sdk/wandb_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,17 @@ def _console(self) -> SettingsConsole:
if self._jupyter:
console = "notebook"
elif self._windows:
console = "notebook"
legacy_env_var = "PYTHONLEGACYWINDOWSSTDIO"
if sys.version_info >= (3, 6) and legacy_env_var not in os.environ:
msg = (
"Set %s environment variable to enable"
" proper console logging on Windows. Falling "
"back to monkey patching stdout/err." % legacy_env_var
)
logger.info(msg)
console = "notebook"
else:
console = "redirect"
else:
console = "redirect"
convert: SettingsConsole = convert_dict[console]
Expand Down
2 changes: 1 addition & 1 deletion wandb/sdk_py27/wandb_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -886,7 +886,7 @@ def _redirect(self, stdout_slave_fd, stderr_slave_fd):
self._out_redir = out_redir
self._err_redir = err_redir
logger.info("Redirects installed.")
except (OSError, AttributeError) as e:
except Exception as e:
print(e)
logger.error("Failed to redirect.", exc_info=e)
return
Expand Down
12 changes: 11 additions & 1 deletion wandb/sdk_py27/wandb_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,17 @@ def _console(self):
if self._jupyter:
console = "notebook"
elif self._windows:
console = "notebook"
legacy_env_var = "PYTHONLEGACYWINDOWSSTDIO"
if sys.version_info >= (3, 6) and legacy_env_var not in os.environ:
msg = (
"Set %s environment variable to enable"
" proper console logging on Windows. Falling "
"back to monkey patching stdout/err." % legacy_env_var
)
logger.info(msg)
console = "notebook"
else:
console = "redirect"
else:
console = "redirect"
convert = convert_dict[console]
Expand Down

0 comments on commit 587e630

Please sign in to comment.