Exit pdb Interactive Mode from Jupyter Notebook

Viewed 2318

Within pdb, I'm using the interact command to enter interactive mode (documentation).

This gives me an InteractiveConsole within pdb (which I need in order to do list comprehension).

From within a Jupyter Notebook, how do I leave interactive mode without exiting the debugger entirely?

This question is the exact same question but the solutions only work from the terminal.

  • ctrl+d from within Jupyter just adds a bookmark.
  • And quit() returns NameError: name 'quit' is not defined

I can do import sys; sys.exit(), but that exits the debugger entirely, meaning I have to start from scratch.

3 Answers

Here is a solution similar to triccare's which doesn't require Emacs.

Run this command on Linux:

echo '\x04' | xclip -selection clipboard

or this command on macOS:

echo '\x04' | pbcopy

and then paste into PDB interactive prompt in Jupyter and press enter.

How this works: This puts the ASCII character 0x04, "END OF TRANSMISSION", onto your clipboard. This character is a "control character" that signals that there is no more input, which causes the PDB interactive session to end.

A platform-independent method (doesn't require the terminal or Emac) to solve this is to use pandas:

  • Run this in the interactive console itself:

    from pandas.io.clipboard import copy; copy("\x04")

  • And then ctrl+v (to paste the "end of transmittion charecter") and Enter.

The only way I have been success is to copy/paste the Crtl-D character from another source. I use Emacs, so this is fairly easy, but any text editor that allows you to insert a Crtl-D into the document should work. Once inserted, use the standard copy/paste into the pdb interact field and hit or . This should get you out.

For Emacs, the long way is as follows, for demonstration purposes:

M-x insert char <RET> END OF TRANSMISSION <RET>

At this point you should see ^D in the buffer. At this point select the character and M-w or kill-ring-save to put it on the clipboard.

Then, change to the browser and make the interactive field active, and paste the character back. You will not see anything. Then hit . This should/might get you out.

Related