Skip to content

Commit

Permalink
Add 'jupyter kernel' command
Browse files Browse the repository at this point in the history
A simple lead in to the 'kernel nanny' work, this adds a command so you
can do:
jupyter kernel --kernel python
  • Loading branch information
takluyver committed Feb 10, 2017
1 parent 59ebd3a commit f6e9610
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 0 deletions.
66 changes: 66 additions & 0 deletions jupyter_client/kernelapp.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import os
import signal
import uuid

from jupyter_core.application import JupyterApp
from tornado.ioloop import IOLoop
from traitlets import Unicode

from . import __version__
from .kernelspec import KernelSpecManager
from .manager import KernelManager

class KernelApp(JupyterApp):
version = __version__
description = "Run a kernel locally"

classes = [KernelManager, KernelSpecManager]

aliases = {
'kernel': 'KernelApp.kernel_name',
'ip': 'KernelManager.ip',
}

kernel_name = Unicode(
help = 'The name of a kernel to start'
).tag(config=True)

def initialize(self, argv=None):
super(KernelApp, self).initialize(argv)
self.km = KernelManager(kernel_name=self.kernel_name,
config=self.config)
cf_basename = 'kernel-%s.json' % uuid.uuid4()
self.km.connection_file = os.path.join(self.runtime_dir, cf_basename)
self.loop = IOLoop.current()

def setup_signals(self):
if os.name == 'nt':
return

def shutdown_handler(signo, frame):
self.loop.add_callback_from_signal(self.shutdown, signo)
for sig in [signal.SIGTERM, signal.SIGINT]:
signal.signal(sig, shutdown_handler)

def shutdown(self, signo):
self.log.info('Shutting down on signal %d' % signo)
self.km.shutdown_kernel()
self.loop.stop()

def log_connection_info(self):
cf = self.km.connection_file
self.log.info('Connection file: %s', cf)
self.log.info("To connect a client: --existing %s", os.path.basename(cf))

def start(self):
self.log.info('Starting kernel %r', self.kernel_name)
try:
self.km.start_kernel()
self.log_connection_info()
self.setup_signals()
self.loop.start()
finally:
self.km.cleanup()


main = KernelApp.launch_instance
5 changes: 5 additions & 0 deletions scripts/jupyter-kernel
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/usr/bin/env python
from jupyter_client.kernelapp import main

if __name__ == '__main__':
main()
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
'console_scripts': [
'jupyter-kernelspec = jupyter_client.kernelspecapp:KernelSpecApp.launch_instance',
'jupyter-run = jupyter_client.runapp:RunApp.launch_instance',
'jupyter-kernel = jupyter_client.kernelapp:main',
]
}
setup_args.pop('scripts', None)
Expand Down

0 comments on commit f6e9610

Please sign in to comment.