如何抑制IPython Notebook中的输出?


113

如何stdout抑制输出?

例如,分号可用于禁止显示返回的对象

>>> 1+1
2

>>> 1+1;   # No output!

但是,打印到标准输出的功能不受分号的影响。

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

>>> MyFunction()
Calculating values...

如何抑制print/ MyFunction抑制输出?


for iruby内核只需添加 nil 为最后一行
frenesim '18

Answers:


167

添加%%capture为单元格的第一行。例如

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

这只是丢弃了输出,但是%%capture魔术可以用来将输出保存到变量- 请参阅文档


2
有人知道%% capture的反义词吗?在这种情况下,如何停止单元格内的%% capture,或者启用它直到单元格结束?
David Parks

2
要知道的是%%capture,只有在单元格结束之前才启用它,并且它必须出现在单元格中的任何代码之前。(因此,似乎无法在牢房中进行捕捉。)
Arel

在此页面上,@ gwd2的答案涵盖了ICYMI,@ David Parks和@Arel的讨论,该答案涉及使用with io.capture_output() as captured:您可以在单元格中进行微调以仅捕获在此with上下文中运行的内容。
韦恩

请注意,这仅适用于Python内核(例如R)。
Max Ghenis


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. 转到全部输出

然后选择您喜欢的任何一个选项。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.