Запуск тестов на выходе ячеек Jupyter Notebook - PullRequest
0 голосов
/ 11 ноября 2018

Я использую Jupyter Notebook или Jupyter Lab для обучения основам Python.

Можно ли запустить тесты на стандартном выводе предыдущей ячейки, не подавляя вывод ячейки?

Магия %%capture со стандартным конфигом перенаправляет стандартный вывод. Я хотел бы иметь возможность видеть результат работы ячейки перед запуском тестов.

, например

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

Испытательная ячейка:

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

1 Ответ

0 голосов
/ 13 января 2019

Это довольно просто, просто оберните волшебство %%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 magic - мощный инструмент. Вы можете найти более продвинутые примеры в документации, см .: определение пользовательских магии глава и документы API: core.magic , core.magic_arguments .

...