How can I check if code is executed in the IPython notebook?
The following worked for my needs:
get_ipython().__class__.__name__
It returns 'TerminalInteractiveShell'
on a terminal IPython, 'ZMQInteractiveShell'
on Jupyter (notebook AND qtconsole) and fails (NameError
) on a regular Python interpreter. The method get_python()
seems to be available in the global namespace by default when IPython is started.
Wrapping it in a simple function:
def isnotebook(): try: shell = get_ipython().__class__.__name__ if shell == 'ZMQInteractiveShell': return True # Jupyter notebook or qtconsole elif shell == 'TerminalInteractiveShell': return False # Terminal running IPython else: return False # Other type (?) except NameError: return False # Probably standard Python interpreter
The above was tested with Python 3.5.2, IPython 5.1.0 and Jupyter 4.2.1 on macOS 10.12 and Ubuntu 14.04.4 LTS
To check if you're in a notebook, which can be important e.g. when determining what sort of progressbar to use, this worked for me:
def in_ipynb(): try: cfg = get_ipython().config if cfg['IPKernelApp']['parent_appname'] == 'ipython-notebook': return True else: return False except NameError: return False
You can check whether python is in interactive mode with the following snippet [1]:
def is_interactive(): import __main__ as main return not hasattr(main, '__file__')
I have found this method very useful because I do a lot of prototyping in the notebook. For testing purposes, I use default parameters. Otherwise, I read the parameters from sys.argv
.
from sys import argvif is_interactive(): params = [<list of default parameters>]else: params = argv[1:]
Following the implementation of autonotebook
, you can tell whether you are in a notebook using the following code.
def in_notebook(): try: from IPython import get_ipython if 'IPKernelApp' not in get_ipython().config: # pragma: no cover return False except ImportError: return False return True