Как подавить вывод в IPython Notebook?


113

Как можно stdoutподавить вывод ?

Точка с запятой может использоваться для подавления отображения возвращаемых объектов, например

>>> 1+1
2

>>> 1+1;   # No output!

Однако на функцию, которая выводит на стандартный вывод, точка с запятой не влияет.

>>> print('Hello!')
Hello!

>>> MyFunction()
Calculating values...

Как можно подавить вывод из print/ MyFunction?


для ядра iruby просто добавьте nil в последнюю строку
frenesim

Ответы:


169

Добавьте %%captureкак первую строку ячейки. например

%%capture
print('Hello')
MyFunction()

Это просто отбрасывает вывод, но %%captureмагию можно использовать для сохранения вывода в переменной - обратитесь к документации.


2
Кто-нибудь знает, что противоположно %% capture? Например, как остановить захват %% внутри ячейки, или он включен до конца ячейки?
Дэвид Паркс

2
Полезно знать, что %%captureон включен только до конца ячейки и должен появляться перед любым кодом в ячейке. (Таким образом, кажется, что нет способа снять захват в камере.)
Арел

Обсуждение ICYMI, @David Parks и @Arel покрыто ответом @gwd2 на этой странице о том, что with io.capture_output() as captured:вы можете выполнить точную настройку в ячейке, чтобы фиксировать только то, что запускается в этом withконтексте.
Уэйн

Обратите внимание, что это работает только для ядер Python (например, не для R).
Макс Генис

92

Подавить вывод

Поместите a ;в конце строки, чтобы запретить печать вывода [ Ссылка ].


5
Это не для кода внутри forцикла. Любые идеи? Я хочу подавить вывод только определенных строк кода в ячейке, а не всех строк. Спасибо
постыдится

16

(кредит: https://stackoverflow.com/a/23611571/389812 )

Вы можете использовать io.capture_output :

from IPython.utils import io

with io.capture_output() as captured:
    MyFunction()

для подавления (например, захвата) stdout и stderr для этих строк внутри with-statement.


Большое спасибо, это сводило меня с ума - у меня есть функция запуска, которую я запускаю каждый раз, когда открываю вызывающую записную книжку %autosaveи хочу подавить ее вывод. Думал, что это будет просто, но как ни странно, contextlib.redirect_stdoutи sys.stdout = open(os.devnull, 'w')оба потерпели неудачу (в конечном итоге напечатали лишнюю пустую строку). Это должен быть принятый ответ.
Люк Дэвис

1
Это был мой любимый ответ, потому что можно подавить часть вывода в ячейке, не подавляя его полностью.
Wolpertinger

-5

Если кому интересно очистить все выходы:

  1. Перейти в ячейку
  2. Перейти ко всем выходам

Затем выберите тот вариант, который вам нравится.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.