运行 测试 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.
我正在使用 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.