##// END OF EJS Templates
Backport PR #6911: don't use text mode in mkstemp...
Backport PR #6911: don't use text mode in mkstemp causes double-encoding of newlines, preventing newline arg from having desired effect, and resulting in CRCRLF line endings on Windows. closes #6599

File last commit:

r13353:0ca701d5
r18801:cc49f317
Show More
win32support.py
74 lines | 2.1 KiB | text/x-python | PythonLexer
MinRK
forward subprocess IO over zmq on Windows...
r3771 """Utility for forwarding file read events over a zmq socket.
MinRK
code updates per review of PR #454
r4021 This is necessary because select on Windows only supports sockets, not FDs.
MinRK
update recently changed modules with Authors in docstring
r4018
Authors:
* MinRK
"""
MinRK
forward subprocess IO over zmq on Windows...
r3771
#-----------------------------------------------------------------------------
# Copyright (C) 2011 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import uuid
import zmq
from threading import Thread
Thomas Kluyver
Replace references to unicode and basestring
r13353 from IPython.utils.py3compat import unicode_type
MinRK
forward subprocess IO over zmq on Windows...
r3771 #-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
class ForwarderThread(Thread):
def __init__(self, sock, fd):
Thread.__init__(self)
self.daemon=True
self.sock = sock
self.fd = fd
def run(self):
MinRK
code updates per review of PR #454
r4021 """Loop through lines in self.fd, and send them over self.sock."""
MinRK
forward subprocess IO over zmq on Windows...
r3771 line = self.fd.readline()
# allow for files opened in unicode mode
Thomas Kluyver
Replace references to unicode and basestring
r13353 if isinstance(line, unicode_type):
MinRK
forward subprocess IO over zmq on Windows...
r3771 send = self.sock.send_unicode
else:
send = self.sock.send
while line:
send(line)
line = self.fd.readline()
# line == '' means EOF
self.fd.close()
self.sock.close()
def forward_read_events(fd, context=None):
MinRK
code updates per review of PR #454
r4021 """Forward read events from an FD over a socket.
MinRK
forward subprocess IO over zmq on Windows...
r3771
This method wraps a file in a socket pair, so it can
be polled for read events by select (specifically zmq.eventloop.ioloop)
"""
if context is None:
context = zmq.Context.instance()
push = context.socket(zmq.PUSH)
push.setsockopt(zmq.LINGER, -1)
pull = context.socket(zmq.PULL)
addr='inproc://%s'%uuid.uuid4()
push.bind(addr)
pull.connect(addr)
forwarder = ForwarderThread(push, fd)
forwarder.start()
return pull
MinRK
code updates per review of PR #454
r4021 __all__ = ['forward_read_events']