In order to support Windows, we needed to do the following things:
A) redirect io streams to disk (currently broken in Windows for py3.6+)
B) implement a python-based tail process
C) clean up spawned processes upon segfaults in the parent process where computation occurs
This diff disables compute log capture for Windows py3.6+, unless the environment variable PYTHONLEGACYWINDOWSSTDIO is set. It prompts the user with a warning message if this is not set upon spinning up dagit.
It also implements the python-based tail process for windows systems, exposed in the dagster cli command so that it can be invoked using subprocess.Popen.
The exposed tail process polls the file (on windows) until the parent process terminates it or exits.
As a bonus, also changed the posix tail process invocation to pass in the appropriate out/err stream so that command line invocations can route the individual streams appropriately (e.g. dagster pipeline execute ... 2>/dev/null).