##// END OF EJS Templates
ipython_directive: Adjust doc examples for reproducibility....
ipython_directive: Adjust doc examples for reproducibility. Before this change, building the documentation twice in a row in an environment configured for reproducible bulids would result in discrepancies such as: diff -ru /gnu/store/...-python-ipython-documentation-8.2.0/share/doc/python-ipython-documentation-8.2.0/html/sphinxext.html /gnu/store/...-python-ipython-documentation-8.2.0-check/share/doc/python-ipython-documentation-8.2.0/html/sphinxext.html --- /gnu/store/...-python-ipython-documentation-8.2.0/share/doc/python-ipython-documentation-8.2.0/html/sphinxext.html 1969-12-31 19:00:01.000000000 -0500 +++ /gnu/store/...-python-ipython-documentation-8.2.0-check/share/doc/python-ipython-documentation-8.2.0/html/sphinxext.html 1969-12-31 19:00:01.000000000 -0500 @@ -682,7 +682,7 @@ <span class="gp">In [2]: </span><span class="kn">import</span> <span class="nn">datetime</span> <span class="gp"> ...: </span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="gp"> ...: </span> -<span class="gh">Out[2]: </span><span class="go">datetime.datetime(2022, 4, 17, 3, 21, 14, 978155)</span> +<span class="gh">Out[2]: </span><span class="go">datetime.datetime(2022, 4, 17, 3, 37, 37, 115081)</span> </pre></div> </div> <p>It supports IPython construct that plain @@ -690,7 +690,7 @@ <div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [3]: </span><span class="kn">import</span> <span class="nn">time</span> <span class="gp">In [4]: </span><span class="o">%</span><span class="k">timeit</span> time.sleep(0.05) -<span class="go">50.2 ms +- 104 us per loop (mean +- std. dev. of 7 runs, 10 loops each)</span> +<span class="go">50.1 ms +- 8.86 us per loop (mean +- std. dev. of 7 runs, 10 loops each)</span> </pre></div> </div> <p>This will also support top-level async when using IPython 7.0+</p> * IPython/sphinxext/ipython_directive.py: Use a fixed date string in the datetime example, and replace the %timeit example by %pdoc, whole output is static.

File last commit:

r20547:8f4e2b41
r27687:71d665c4
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]:
[]