Bagaimana Anda menekan output di IPython Notebook?

113

Bagaimana cara stdoutmenekan keluaran ?

Titik koma dapat digunakan untuk menekan tampilan objek yang dikembalikan, misalnya

>>> 1+1
2

>>> 1+1;   # No output!

Namun, fungsi yang mencetak ke stdout tidak terpengaruh oleh titik koma.

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

>>> MyFunction()
Calculating values...

Bagaimana output dari print/ MyFunctionditekan?

Nol
sumber
untuk kernel iruby tambahkan saja nil sebagai baris terakhir
frenesim

Jawaban:

168

Tambahkan %%capturesebagai baris pertama sel. misalnya

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

Ini hanya membuang output, tetapi %%capturekeajaiban dapat digunakan untuk menyimpan output ke variabel - lihat dokumen

Nol
sumber
2
Ada yang tahu kebalikan dari %% capture itu? Seperti, bagaimana Anda menghentikan pengambilan %% di dalam sel, atau apakah itu diaktifkan sampai akhir sel?
David Parks
2
Hal yang baik untuk diketahui adalah %%capturehanya diaktifkan sampai akhir sel, dan itu harus muncul sebelum kode apa pun di dalam sel. (Jadi tampaknya tidak ada cara untuk tidak tertangkap di dalam sel.)
Arel
Diskusi ICYMI, @David Parks, dan @ Arel tercakup dalam jawaban @ gwd2 di halaman ini tentang penggunaan, with io.capture_output() as captured:Anda dapat menyelaraskan dalam sel untuk hanya menangkap apa yang dijalankan dalam withkonteks itu.
Wayne
Perhatikan bahwa ini hanya berfungsi untuk kernel Python (misalnya, bukan R).
Max Ghenis
90

Tekan keluaran

Letakkan a ;di akhir baris untuk menekan pencetakan output [ Referensi ].

Farhad Maleki
sumber
5
Ini bukan untuk kode di dalam forloop. Ada ide? Saya hanya ingin menekan keluaran dari baris kode tertentu di dalam sel, tidak semua baris. Terima kasih
Bingung
16

(kredit: https://stackoverflow.com/a/23611571/389812 )

Anda bisa menggunakan io.capture_output :

from IPython.utils import io

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

untuk menekan (misalnya menangkap) stdout dan stderr untuk garis-garis di dalam with-statement.

gdw2.dll
sumber
Terima kasih banyak, ini membuat saya gila - Saya memiliki fungsi startup yang saya jalankan setiap kali saya membuka notebook yang memanggil %autosave, dan ingin menekan outputnya. Pikir itu akan sederhana - tetapi aneh, contextlib.redirect_stdoutdan sys.stdout = open(os.devnull, 'w')keduanya gagal (akhirnya mencetak baris kosong tambahan). Ini harus menjadi jawaban yang diterima.
Luke Davis
1
Ini adalah jawaban favorit saya, karena seseorang dapat menekan beberapa keluaran di sel tanpa menekan semuanya.
Wolpertinger
-5

Jika ada yang tertarik untuk menghapus semua keluaran:

  1. Pergi ke Sel
  2. Pergi ke Semua Output

Kemudian pilih opsi mana yang Anda suka.

Yuqin Peng
sumber