##// END OF EJS Templates
Statically type OInfo. (#13973)...
Statically type OInfo. (#13973) In view of working with #13860, some cleanup inspect to be properly typed, and using stricter datastructure. Instead of dict we now use dataclasses, this will make sure that fields type and access can be stricter and verified not only at runtime, but by mypy

File last commit:

r20547:8f4e2b41
r28166:29b451fc merge
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]:
[]