##// END OF EJS Templates
allow keyboard interrupt to break out of ipdb...
allow keyboard interrupt to break out of ipdb @takluyver @minrk and I discussed this issue in person. It's currently problematic that there is no way, short of restarting a kernel, to get out of an ipdb session if you've deleted the output of the cell in the notebook which started it (by e.g. re-executing that cell). This patch makes Ctrl-C behave the same as Ctrl-D inside of ipdb - it exits the ipdb session. This also makes it possible to stop ipdb sessions from another client. I polled @katyhuff, @scopatz, and some other pyne/pyne hackers and they were surprised to hear that this was not the behavior already.

File last commit:

r10298:49d3c39a
r16455:bb8a2804
Show More
blocking.py
58 lines | 2.1 KiB | text/x-python | PythonLexer
MinRK
update inprocess kernel to new layout...
r10298 """ Implements a fully blocking kernel client.
epatters
Refactor kernel managers in preparation for the EmbeddedKernel.
r8408
Useful for test suites and blocking terminal interfaces.
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2012 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING.txt, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
MinRK
update inprocess kernel to new layout...
r10298 # IPython imports
epatters
BUG: raw_input logic incorrect for in-process terminal frontend.
r8482 from IPython.utils.io import raw_print
epatters
Refactor kernel managers in preparation for the EmbeddedKernel.
r8408 from IPython.utils.traitlets import Type
MinRK
update inprocess kernel to new layout...
r10298 from IPython.kernel.blocking.channels import BlockingChannelMixin
epatters
Refactor kernel managers in preparation for the EmbeddedKernel.
r8408
MinRK
update inprocess kernel to new layout...
r10298 # Local imports
from .channels import (
InProcessShellChannel,
InProcessIOPubChannel,
InProcessStdInChannel,
)
from .client import InProcessKernelClient
epatters
Refactor kernel managers in preparation for the EmbeddedKernel.
r8408
#-----------------------------------------------------------------------------
# Blocking kernel manager
#-----------------------------------------------------------------------------
Brian Granger
Cleanup naming and organization of channels....
r9120 class BlockingInProcessShellChannel(BlockingChannelMixin, InProcessShellChannel):
epatters
Refactor kernel managers in preparation for the EmbeddedKernel.
r8408 pass
Brian Granger
Cleanup naming and organization of channels....
r9120 class BlockingInProcessIOPubChannel(BlockingChannelMixin, InProcessIOPubChannel):
epatters
Refactor kernel managers in preparation for the EmbeddedKernel.
r8408 pass
Brian Granger
Cleanup naming and organization of channels....
r9120 class BlockingInProcessStdInChannel(BlockingChannelMixin, InProcessStdInChannel):
MinRK
update inprocess kernel to new layout...
r10298
epatters
BUG: raw_input logic incorrect for in-process terminal frontend.
r8482 def call_handlers(self, msg):
""" Overridden for the in-process channel.
This methods simply calls raw_input directly.
"""
msg_type = msg['header']['msg_type']
if msg_type == 'input_request':
MinRK
update inprocess kernel to new layout...
r10298 _raw_input = self.client.kernel._sys_raw_input
epatters
BUG: raw_input logic incorrect for in-process terminal frontend.
r8482 prompt = msg['content']['prompt']
raw_print(prompt, end='')
Pietro Berkes
BUG: Solve 2to3 conversion error....
r8940 self.input(_raw_input())
epatters
Refactor kernel managers in preparation for the EmbeddedKernel.
r8408
MinRK
update inprocess kernel to new layout...
r10298 class BlockingInProcessKernelClient(InProcessKernelClient):
epatters
Refactor kernel managers in preparation for the EmbeddedKernel.
r8408
# The classes to use for the various channels.
Brian Granger
Cleanup naming and organization of channels....
r9120 shell_channel_class = Type(BlockingInProcessShellChannel)
iopub_channel_class = Type(BlockingInProcessIOPubChannel)
stdin_channel_class = Type(BlockingInProcessStdInChannel)