##// END OF EJS Templates
Use environment variable to identify conda / mamba (#14515)...
Use environment variable to identify conda / mamba (#14515) Conda and mamba both set an environment variable which refers to the base environment's executable path, use that in preference to less reliable methods, but fall back on the other approaches if unable to locate the executable this way. Additionally, change the search to look for the bare command name rather than the command within the top level of the active environment, I'm dubious this approach works with any current conda / mamba version which usually place their executable links in a `condabin` directory or elsewhere not at the same level as the Python executable. I believe this will also address https://github.com/ipython/ipython/issues/14350, which I'm also seeing in a Windows context where the regex fails to parse and causes a traceback.

File last commit:

r20547:8f4e2b41
r28875:d23bee0c 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]:
[]