Как подавить вывод в 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.

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

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

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

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

Юцинь Пэн
источник