IPython Notebookで出力をどのように抑制しますか?


113

どうすれば出力をstdout抑制できますか?

セミコロンを使用して、返されたオブジェクトの表示を抑制できます。次に例を示します。

>>> 1+1
2

>>> 1+1;   # No output!

ただし、stdoutに出力する関数はセミコロンの影響を受けません。

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

>>> MyFunction()
Calculating values...

どのようにprint/ からの出力をMyFunction抑制できますか?


irubyカーネルの場合nil 、最後の行として追加するだけ
frenesim

回答:


167

%%captureセルの最初の行として追加します。例えば

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

これは単に出力を破棄しますが、%%captureマジックを使用して出力を変数に保存できます- ドキュメントを参照してください


2
%% captureの正反対は誰でも知っていますか?のように、セル内で%% captureをどのように停止しますか、それともセルの最後まで有効にしますか?
デビッドパークス

2
知っておくと良いの%%captureは、セルの最後までしか有効にならず、セル内のコードの前に表示する必要があることです。(つまり、セル内で
キャプチャを解除

ICYMI、@ David Parks、および@Arelのディスカッションは、このページでの@ gwd2の回答でカバーさwith io.capture_output() as captured:れていwithます。セル内で微調整して、そのコンテキストで実行されているものだけをキャプチャすることを使用できます。
ウェイン

これはPythonカーネルでのみ機能することに注意してください(Rは不可)。
マックスジェニス

90

出力を抑制

;出力の印刷を抑制するには、行末にaを置きます[ 参照 ]。


4
これは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_stdoutsys.stdout = open(os.devnull, 'w')両方とも失敗します(余分な空白行が印刷されることになります)。これは受け入れられる答えになるはずです。
ルークデイビス

1
これは私のお気に入りの答えでした。セルの出力の一部をすべて抑制せずに抑制できるからです。
Wolpertinger

-5

すべての出力をクリアすることに関心がある場合:

  1. セルに移動
  2. すべての出力に移動

次に、好きなオプションを選択します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.