运行 测试 Jupyter Notebook 单元的输出

Running tests on the output of Jupyter Notebook cells

我正在使用 Jupyter Notebook 或 Jupyter Lab 教授 Python 的基础知识。

是否可以 运行 测试前一个单元格的标准输出而不抑制单元格的输出?

具有标准配置的 Magics %%capture 重定向标准输出。我希望在 运行 测试之前仍能看到单元格的输出。

例如

[cell 1] >> print('Hello, world!')
Hello, world!

测试单元格:

[cell 2] >>  if (cell1.stdout == 'Hello, world!'):
         ...    print('Success!')
         ... else:
         ...    print('Tests failed')

这很简单,只需将 %%capture 魔术与显示捕获输出的自定义函数包装起来即可:

from IPython.core import magic

@magic.register_cell_magic
def non_suppressing_capture(variable, cell):
    get_ipython().magics_manager.magics['cell']['capture'](variable, cell)
    globals()[variable].show()

并且(在执行上面的代码之后)像这样使用它:

%%non_suppressing_capture cell1
print('Hello, world!')

实际上,除非您添加测试字符串的换行符,否则您的测试将失败:

if cell1.stdout == 'Hello, world!\n':
    print('Success!')
else:
    print('Tests failed')

IPython 魔法是一个强大的工具。您可以在文档中找到更多高级示例,请参阅:defining custom magics chapter and API docs: core.magic, core.magic_arguments.