issue #550: fix up TTY ioctls on WSL 2016 Anniversary Update

This commit is contained in:
David Wilson 2019-02-23 15:52:52 +00:00
parent 0b177f1491
commit 87c8ab4323
2 changed files with 10 additions and 3 deletions

View File

@ -140,7 +140,6 @@ try:
except NameError: except NameError:
BaseException = Exception BaseException = Exception
IS_WSL = 'Microsoft' in os.uname()[2]
PY24 = sys.version_info < (2, 5) PY24 = sys.version_info < (2, 5)
PY3 = sys.version_info > (3,) PY3 = sys.version_info > (3,)
if PY3: if PY3:
@ -164,6 +163,14 @@ try:
except NameError: except NameError:
next = lambda it: it.next() next = lambda it: it.next()
# #550: prehistoric WSL did not advertise itself in uname output.
try:
fp = open('/proc/sys/kernel/osrelease')
IS_WSL = 'Microsoft' in fp.read()
fp.close()
except IOError:
IS_WSL = False
#: Default size for calls to :meth:`Side.read` or :meth:`Side.write`, and the #: Default size for calls to :meth:`Side.read` or :meth:`Side.write`, and the
#: size of buffers configured by :func:`mitogen.parent.create_socketpair`. This #: size of buffers configured by :func:`mitogen.parent.create_socketpair`. This

View File

@ -371,11 +371,11 @@ def create_child(args, merge_stdio=False, stderr_pipe=False, preexec_fn=None):
def _acquire_controlling_tty(): def _acquire_controlling_tty():
os.setsid() os.setsid()
if sys.platform == 'linux2': if sys.platform in ('linux', 'linux2'):
# On Linux, the controlling tty becomes the first tty opened by a # On Linux, the controlling tty becomes the first tty opened by a
# process lacking any prior tty. # process lacking any prior tty.
os.close(os.open(os.ttyname(2), os.O_RDWR)) os.close(os.open(os.ttyname(2), os.O_RDWR))
if hasattr(termios, 'TIOCSCTTY'): if hasattr(termios, 'TIOCSCTTY') and not mitogen.core.IS_WSL:
# On BSD an explicit ioctl is required. For some inexplicable reason, # On BSD an explicit ioctl is required. For some inexplicable reason,
# Python 2.6 on Travis also requires it. # Python 2.6 on Travis also requires it.
fcntl.ioctl(2, termios.TIOCSCTTY) fcntl.ioctl(2, termios.TIOCSCTTY)