The traditional IPython (ipython) consists of a single process that combines a terminal based UI with the process that runs the users code.
While this traditional application still exists, the modern IPython consists of two processes:
IPython currently has 3 frontends:
ipython console)ipython qtconsole)ipython notebook)The Kernel and Frontend communicate over a ZeroMQ/JSON based messaging protocol, which allows multiple Frontends (even of different types) to communicate with a single Kernel. This opens the door for all sorts of interesting things, such as connecting a Console or Qt Console to a Notebook's Kernel. For example, you may want to connect a Qt console to your Notebook's Kernel and use it as a help
browser, calling ?? on objects in the Qt console (whose pager is more flexible than the
one in the notebook).
This Notebook describes how you would connect another Frontend to a Kernel that is associated with a Notebook.
To connect another Frontend to a Kernel manually, you first need to find out the connection information for the Kernel using the %connect_info magic:
%connect_info
{
"stdin_port": 52858,
"ip": "127.0.0.1",
"hb_port": 52859,
"key": "7efd45ca-d8a2-41b0-9cea-d9116d0fb883",
"shell_port": 52856,
"iopub_port": 52857
}
Paste the above JSON into a file, and connect with:
$> ipython <app> --existing <file>
or, if you are local, you can connect with just:
$> ipython <app> --existing kernel-b3bac7c1-8b2c-4536-8082-8d1df24f99ac.json
or even just:
$> ipython <app> --existing
if this is the most recent IPython session you have started.
You can see that this magic displays everything you need to connect to this Notebook's Kernel.
You can also start a new Qt Console connected to your current Kernel by using the %qtconsole magic. This will detect the necessary connection
information and start the Qt Console for you automatically.
a = 10
%qtconsole
raw_input and %debug¶The one feature the notebook currently doesn't support as a Frontend is the ability to send data to the Kernel's standard input socket. That is, if the Kernel requires information to be typed interactively by calling the builtin raw_input function, the Notebook will be blocked. This happens for example if you run a script that queries interactively for parameters, and very importantly, is how the interactive IPython debugger that activates when you type %debug works.
So, in order to be able to use %debug or anything else that requires raw_input, you can either use a Terminal Console or Qt Console connected to a Notebook's Kernel as described above.