##// END OF EJS Templates
Initial support in ipkernel for proper displayhook handling.
Initial support in ipkernel for proper displayhook handling.

File last commit:

r2786:a522a5c7
r2786:a522a5c7
Show More
zmqshell.py
72 lines | 2.3 KiB | text/x-python | PythonLexer
Brian Granger
Initial version of system command out/err forwarding.
r2773 import sys
from subprocess import Popen, PIPE
Brian Granger
Initial support in ipkernel for proper displayhook handling.
r2786
from IPython.core.interactiveshell import (
InteractiveShell, InteractiveShellABC
)
from IPython.core.displayhook import DisplayHook
from IPython.utils.traitlets import Instance, Type, Dict
from IPython.zmq.session import extract_header
class ZMQDisplayTrap(DisplayHook):
session = Instance('IPython.zmq.session.Session')
pub_socket = Instance('zmq.Socket')
parent_header = Dict({})
def set_parent(self, parent):
"""Set the parent for outbound messages."""
self.parent_header = extract_header(parent)
def start_displayhook(self):
self.msg = self.session.msg(u'pyout', {}, parent=self.parent_header)
def write_output_prompt(self):
"""Write the output prompt."""
if self.do_full_cache:
self.msg['content']['output_sep'] = self.output_sep
self.msg['content']['prompt_string'] = str(self.prompt_out)
self.msg['content']['prompt_number'] = self.prompt_count
self.msg['content']['output_sep2'] = self.output_sep2
def write_result_repr(self, result_repr):
self.msg['content']['data'] = result_repr
def finish_displayhook(self):
"""Finish up all displayhook activities."""
self.pub_socket.send_json(self.msg)
self.msg = None
Brian Granger
Initial version of system command out/err forwarding.
r2773
class ZMQInteractiveShell(InteractiveShell):
"""A subclass of InteractiveShell for ZMQ."""
Brian Granger
Initial support in ipkernel for proper displayhook handling.
r2786 displayhook_class = Type(ZMQDisplayTrap)
Brian Granger
Initial version of system command out/err forwarding.
r2773 def system(self, cmd):
cmd = self.var_expand(cmd, depth=2)
Brian Granger
Add flushing to stdout/stderr in system calls.
r2774 sys.stdout.flush()
sys.stderr.flush()
Brian Granger
Initial version of system command out/err forwarding.
r2773 p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
for line in p.stdout.read().split('\n'):
if len(line) > 0:
print line
for line in p.stderr.read().split('\n'):
if len(line) > 0:
print line
Brian Granger
Refactor of prompts and the displayhook....
r2781 p.wait()
Brian Granger
Initial version of system command out/err forwarding.
r2773
Brian Granger
Changing how IPython.utils.io.Term is handled....
r2775 def init_io(self):
# This will just use sys.stdout and sys.stderr. If you want to
# override sys.stdout and sys.stderr themselves, you need to do that
# *before* instantiating this class, because Term holds onto
# references to the underlying streams.
import IPython.utils.io
Term = IPython.utils.io.IOTerm()
IPython.utils.io.Term = Term
Brian Granger
Initial version of system command out/err forwarding.
r2773 InteractiveShellABC.register(ZMQInteractiveShell)
Brian Granger
Initial support in ipkernel for proper displayhook handling.
r2786