Show More
@@ -17,10 +17,12 b' import logging' | |||
|
17 | 17 | import sys |
|
18 | 18 | |
|
19 | 19 | # Local imports. |
|
20 | from IPython.core.interactiveshell import InteractiveShellABC | |
|
20 | 21 | from IPython.inprocess.socket import DummySocket |
|
21 | 22 | from IPython.utils.jsonutil import json_clean |
|
22 | from IPython.utils.traitlets import Any, Instance, List | |
|
23 | from IPython.utils.traitlets import Any, Enum, Instance, List, Type | |
|
23 | 24 | from IPython.zmq.ipkernel import Kernel |
|
25 | from IPython.zmq.zmqshell import ZMQInteractiveShell | |
|
24 | 26 | |
|
25 | 27 | #----------------------------------------------------------------------------- |
|
26 | 28 | # Main kernel class |
@@ -32,9 +34,17 b' class InProcessKernel(Kernel):' | |||
|
32 | 34 | # InProcessKernel interface |
|
33 | 35 | #------------------------------------------------------------------------- |
|
34 | 36 | |
|
37 | # The frontends connected to this kernel. | |
|
35 | 38 | frontends = List( |
|
36 | 39 | Instance('IPython.inprocess.kernelmanager.InProcessKernelManager')) |
|
37 | 40 | |
|
41 | # The GUI environment that the kernel is running under. This need not be | |
|
42 | # specified for the normal operation for the kernel, but is required for | |
|
43 | # IPython's GUI support (including pylab). The default is 'inline' because | |
|
44 | # it is safe under all GUI toolkits. | |
|
45 | gui = Enum(('tk', 'gtk', 'wx', 'qt', 'qt4', 'inline'), | |
|
46 | default_value='inline') | |
|
47 | ||
|
38 | 48 | raw_input_str = Any() |
|
39 | 49 | stdout = Any() |
|
40 | 50 | stderr = Any() |
@@ -43,6 +53,7 b' class InProcessKernel(Kernel):' | |||
|
43 | 53 | # Kernel interface |
|
44 | 54 | #------------------------------------------------------------------------- |
|
45 | 55 | |
|
56 | shell_class = Type() | |
|
46 | 57 | shell_streams = List() |
|
47 | 58 | control_stream = Any() |
|
48 | 59 | iopub_socket = Instance(DummySocket, ()) |
@@ -55,6 +66,7 b' class InProcessKernel(Kernel):' | |||
|
55 | 66 | super(InProcessKernel, self).__init__(**traits) |
|
56 | 67 | |
|
57 | 68 | self.iopub_socket.on_trait_change(self._io_dispatch, 'message_sent') |
|
69 | self.shell.kernel = self | |
|
58 | 70 | |
|
59 | 71 | def execute_request(self, stream, ident, parent): |
|
60 | 72 | """ Override for temporary IO redirection. """ |
@@ -122,6 +134,9 b' class InProcessKernel(Kernel):' | |||
|
122 | 134 | from IPython.zmq.session import Session |
|
123 | 135 | return Session(config=self.config) |
|
124 | 136 | |
|
137 | def _shell_class_default(self): | |
|
138 | return InProcessInteractiveShell | |
|
139 | ||
|
125 | 140 | def _stdout_default(self): |
|
126 | 141 | from IPython.zmq.iostream import OutStream |
|
127 | 142 | return OutStream(self.session, self.iopub_socket, u'stdout') |
@@ -129,3 +144,33 b' class InProcessKernel(Kernel):' | |||
|
129 | 144 | def _stderr_default(self): |
|
130 | 145 | from IPython.zmq.iostream import OutStream |
|
131 | 146 | return OutStream(self.session, self.iopub_socket, u'stderr') |
|
147 | ||
|
148 | #----------------------------------------------------------------------------- | |
|
149 | # Interactive shell subclass | |
|
150 | #----------------------------------------------------------------------------- | |
|
151 | ||
|
152 | class InProcessInteractiveShell(ZMQInteractiveShell): | |
|
153 | ||
|
154 | kernel = Instance('IPython.inprocess.ipkernel.InProcessKernel') | |
|
155 | ||
|
156 | #------------------------------------------------------------------------- | |
|
157 | # InteractiveShell interface | |
|
158 | #------------------------------------------------------------------------- | |
|
159 | ||
|
160 | def enable_gui(self, gui=None): | |
|
161 | """ Enable GUI integration for the kernel. | |
|
162 | """ | |
|
163 | from IPython.zmq.eventloops import enable_gui | |
|
164 | if not gui: | |
|
165 | gui = self.kernel.gui | |
|
166 | enable_gui(gui, kernel=self.kernel) | |
|
167 | ||
|
168 | def enable_pylab(self, gui=None, import_all=True, welcome_message=False): | |
|
169 | """ Activate pylab support at runtime. | |
|
170 | """ | |
|
171 | if not gui: | |
|
172 | gui = self.kernel.gui | |
|
173 | super(InProcessInteractiveShell, self).enable_pylab(gui, import_all, | |
|
174 | welcome_message) | |
|
175 | ||
|
176 | InteractiveShellABC.register(InProcessInteractiveShell) |
@@ -47,7 +47,8 b' from IPython.utils import py3compat' | |||
|
47 | 47 | from IPython.utils.frame import extract_module_locals |
|
48 | 48 | from IPython.utils.jsonutil import json_clean |
|
49 | 49 | from IPython.utils.traitlets import ( |
|
50 | Any, Instance, Float, Dict, CaselessStrEnum, List, Set, Integer, Unicode | |
|
50 | Any, Instance, Float, Dict, CaselessStrEnum, List, Set, Integer, Unicode, | |
|
51 | Type | |
|
51 | 52 | ) |
|
52 | 53 | |
|
53 | 54 | from entry_point import base_launch_kernel |
@@ -75,6 +76,8 b' class Kernel(Configurable):' | |||
|
75 | 76 | loop.add_timeout(time.time()+0.1, self.enter_eventloop) |
|
76 | 77 | |
|
77 | 78 | shell = Instance('IPython.core.interactiveshell.InteractiveShellABC') |
|
79 | shell_class = Type(ZMQInteractiveShell) | |
|
80 | ||
|
78 | 81 | session = Instance(Session) |
|
79 | 82 | profile_dir = Instance('IPython.core.profiledir.ProfileDir') |
|
80 | 83 | shell_streams = List() |
@@ -137,7 +140,7 b' class Kernel(Configurable):' | |||
|
137 | 140 | super(Kernel, self).__init__(**kwargs) |
|
138 | 141 | |
|
139 | 142 | # Initialize the InteractiveShell subclass |
|
140 |
self.shell = |
|
|
143 | self.shell = self.shell_class.instance(config=self.config, | |
|
141 | 144 | profile_dir = self.profile_dir, |
|
142 | 145 | user_module = self.user_module, |
|
143 | 146 | user_ns = self.user_ns, |
@@ -14,8 +14,18 b' from IPython.lib import guisupport' | |||
|
14 | 14 | def main(): |
|
15 | 15 | app = guisupport.get_app_qt4() |
|
16 | 16 | |
|
17 |
# Create a kernel |
|
|
18 | kernel = InProcessKernel() | |
|
17 | # Create a kernel. | |
|
18 | # | |
|
19 | # Setting the GUI is not necessary for the normal operation of the kernel, | |
|
20 | # but it is used for IPython GUI's integration, particularly in pylab. By | |
|
21 | # default, the inline backend is used, which is safe under all toolkits. | |
|
22 | # | |
|
23 | # WARNING: Under no circumstances should another GUI toolkit, like wx, be | |
|
24 | # used when running a Qt application. This will lead to unexpected behavior, | |
|
25 | # including segfaults. | |
|
26 | kernel = InProcessKernel(gui='qt4') | |
|
27 | ||
|
28 | # Populate the kernel's namespace. | |
|
19 | 29 | kernel.shell.push({'x': 0, 'y': 1, 'z': 2}) |
|
20 | 30 | |
|
21 | 31 | # Create a kernel manager for the frontend and register it with the kernel. |
General Comments 0
You need to be logged in to leave comments.
Login now