Como você suprime a saída no Notebook IPython?

113

Como a saída pode stdoutser suprimida?

Um ponto e vírgula pode ser usado para suprimir a exibição de objetos retornados, por exemplo

>>> 1+1
2

>>> 1+1;   # No output!

No entanto, uma função que imprime em stdout não é afetada pelo ponto-e-vírgula.

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

>>> MyFunction()
Calculating values...

Como pode a saída de print/ MyFunctionser suprimida?

Zero
fonte
para o kernel iruby basta adicionar nil como última linha
frenesim

Respostas:

167

Adicione %%capturecomo a primeira linha da célula. por exemplo

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

Isso simplesmente descarta a saída, mas a %%capturemágica pode ser usada para salvar a saída em uma variável - consulte a documentação

Zero
fonte
2
Alguém sabe qual é o oposto de %% capture? Como em, como você interrompe a captura %% dentro de uma célula, ou ela é ativada até o final da célula?
David Parks,
2
É bom saber que %%capturesó está habilitado até o final da célula e deve aparecer antes de qualquer código na célula. (Portanto, parece que não há uma maneira de cancelar a captura dentro de uma célula.)
Arel
A discussão de ICYMI, @David Parks e @ Arel é abordada pela resposta de @ gwd2 nesta página sobre como usar with io.capture_output() as captured:o ajuste fino dentro de uma célula para capturar apenas o que é executado naquele withcontexto.
Wayne
Observe que isso só funciona para kernels Python (por exemplo, não R).
Max Ghenis
90

Suprimir saída

Coloque um ;no final de uma linha para suprimir a impressão da saída [ Referência ].

Farhad Maleki
fonte
4
Isso não acontece com um código dentro de um forloop. Alguma ideia? Desejo apenas suprimir a saída de linhas específicas de código na célula, não de todas as linhas. Obrigado
Confundido em
16

(crédito: https://stackoverflow.com/a/23611571/389812 )

Você pode usar io.capture_output :

from IPython.utils import io

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

para suprimir (por exemplo, capturar) stdout e stderr para essas linhas dentro do with-statement.

gdw2
fonte
Muito obrigado, isso estava me deixando louco - tenho uma função de inicialização que executo toda vez que abro um notebook que chama %autosavee queria suprimir sua saída. Achei que seria simples - mas estranhamente, contextlib.redirect_stdoute sys.stdout = open(os.devnull, 'w')ambos falham (acabam imprimindo uma linha em branco extra). Esta deve ser a resposta aceita.
Luke Davis
1
Essa foi minha resposta favorita, porque é possível suprimir parte da saída de uma célula sem suprimir tudo.
Wolpertinger
-5

Se alguém estiver interessado em limpar todas as saídas:

  1. Ir para a célula
  2. Ir para todas as saídas

Em seguida, escolha a opção de sua preferência.

Yuqin Peng
fonte