internal_ipkernel.py
59 lines
| 2.2 KiB
| text/x-python
|
PythonLexer
Fernando Perez
|
r4489 | #----------------------------------------------------------------------------- | ||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
import subprocess | ||||
import sys | ||||
MinRK
|
r5267 | from IPython.lib.kernel import connect_qtconsole | ||
Martin Spacek
|
r11346 | from IPython.kernel.zmq.kernelapp import IPKernelApp | ||
Fernando Perez
|
r4489 | |||
#----------------------------------------------------------------------------- | ||||
# Functions and classes | ||||
#----------------------------------------------------------------------------- | ||||
def pylab_kernel(gui): | ||||
"""Launch and return an IPython kernel with pylab support for the desired gui | ||||
""" | ||||
MinRK
|
r5267 | kernel = IPKernelApp.instance() | ||
MinRK
|
r4502 | kernel.initialize(['python', '--pylab=%s' % gui, | ||
Fernando Perez
|
r4489 | #'--log-level=10' | ||
]) | ||||
return kernel | ||||
class InternalIPKernel(object): | ||||
def init_ipkernel(self, backend): | ||||
# Start IPython kernel with GUI event loop and pylab support | ||||
self.ipkernel = pylab_kernel(backend) | ||||
# To create and track active qt consoles | ||||
self.consoles = [] | ||||
# This application will also act on the shell user namespace | ||||
self.namespace = self.ipkernel.shell.user_ns | ||||
# Keys present at startup so we don't print the entire pylab/numpy | ||||
# namespace when the user clicks the 'namespace' button | ||||
self._init_keys = set(self.namespace.keys()) | ||||
# Example: a variable that will be seen by the user in the shell, and | ||||
# that the GUI modifies (the 'Counter++' button increments it): | ||||
self.namespace['app_counter'] = 0 | ||||
#self.namespace['ipkernel'] = self.ipkernel # dbg | ||||
def print_namespace(self, evt=None): | ||||
Thomas Kluyver
|
r6453 | print("\n***Variables in User namespace***") | ||
Fernando Perez
|
r4489 | for k, v in self.namespace.iteritems(): | ||
if k not in self._init_keys and not k.startswith('_'): | ||||
Thomas Kluyver
|
r6453 | print('%s -> %r' % (k, v)) | ||
Fernando Perez
|
r4489 | sys.stdout.flush() | ||
def new_qt_console(self, evt=None): | ||||
MinRK
|
r5267 | """start a new qtconsole connected to our kernel""" | ||
return connect_qtconsole(self.ipkernel.connection_file, profile=self.ipkernel.profile) | ||||
Fernando Perez
|
r4489 | |||
def count(self, evt=None): | ||||
self.namespace['app_counter'] += 1 | ||||
def cleanup_consoles(self, evt=None): | ||||
for c in self.consoles: | ||||
c.kill() | ||||