##// END OF EJS Templates
Upgrade pip before setuptools for Python compat....
Upgrade pip before setuptools for Python compat. Setuptools recently dropped Python 3.3 and with an out of date pip we know install an incompatible setuptools on the 6.x branch. This should avoid the same error on future python drops.

File last commit:

r20547:8f4e2b41
r24424:3f55b241
Show More
Capturing Output.ipynb
505 lines | 19.2 KiB | text/plain | TextLexer

Capturing Output With %%capture

IPython has a [cell magic](Cell Magics.ipynb), %%capture, which captures the stdout/stderr of a cell. With this magic you can discard these streams or store them in a variable.

In [1]:
from __future__ import print_function
import sys

By default, %%capture discards these streams. This is a simple way to suppress unwanted output.

In [2]:
%%capture
print('hi, stdout')
print('hi, stderr', file=sys.stderr)

If you specify a name, then stdout/stderr will be stored in an object in your namespace.

In [3]:
%%capture captured
print('hi, stdout')
print('hi, stderr', file=sys.stderr)
In [4]:
captured
Out[4]:
<IPython.utils.capture.CapturedIO at 0x1076c9310>

Calling the object writes the output to stdout/stderr as appropriate.

In [5]:
captured()
hi, stdout
hi, stderr
In [6]:
captured.stdout
Out[6]:
'hi, stdout\n'
In [7]:
captured.stderr
Out[7]:
'hi, stderr\n'

%%capture grabs all output types, not just stdout/stderr, so you can do plots and use IPython's display system inside %%capture

In [8]:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
In [9]:
%%capture wontshutup

print("setting up X")
x = np.linspace(0,5,1000)
print("step 2: constructing y-data")
y = np.sin(x)
print("step 3: display info about y")
plt.plot(x,y)
print("okay, I'm done now")
In [10]:
wontshutup()
setting up X
step 2: constructing y-data
step 3: display info about y
okay, I'm done now
No description has been provided for this image

And you can selectively disable capturing stdout, stderr or rich display, by passing --no-stdout, --no-stderr and --no-display

In [11]:
%%capture cap --no-stderr
print('hi, stdout')
print("hello, stderr", file=sys.stderr)
hello, stderr
In [12]:
cap.stdout
Out[12]:
'hi, stdout\n'
In [13]:
cap.stderr
Out[13]:
''
In [14]:
cap.outputs
Out[14]:
[]