Jak pomijać dane wyjściowe w Notatniku IPython?

113

Jak można stdoutstłumić dane wyjściowe ?

Na przykład średnik może służyć do pomijania wyświetlania zwracanych obiektów

>>> 1+1
2

>>> 1+1;   # No output!

Jednak na funkcję, która drukuje na standardowe wyjście, nie ma wpływu średnik.

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

>>> MyFunction()
Calculating values...

W jaki sposób można zablokować dane wyjściowe z print/ MyFunctionzostać wstrzymane?

Zero
źródło
dla iruby kernel po prostu dodaj nil jako ostatnią linię
frenesim

Odpowiedzi:

168

Dodaj %%capturejako pierwszą linię komórki. na przykład

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

To po prostu odrzuca wyjście, ale %%capturemagia może być użyta do zapisania wyniku w zmiennej - zapoznaj się z dokumentacją

Zero
źródło
2
Czy ktoś wie, co jest przeciwieństwem przechwytywania %%? Tak jak w, jak zatrzymać przechwytywanie %% w komórce, czy jest włączone do końca komórki?
David Parks,
2
Warto wiedzieć, że jest %%capturewłączony tylko do końca komórki i musi pojawić się przed jakimkolwiek kodem w komórce. (Wygląda więc na to, że nie ma sposobu na uwolnienie się od komórki.)
Arel
Dyskusja ICYMI, @David Parks i @ Arel jest objęta odpowiedzią @ gwd2 na tej stronie, dotyczącą korzystania z with io.capture_output() as captured:możliwości dostrojenia wewnątrz komórki, aby przechwytywać tylko to, co jest uruchamiane w tym withkontekście.
Wayne
Zauważ, że działa to tylko dla jądra Pythona (np. Nie R).
Max Ghenis
91

Wyłącz wyjście

Umieść znak ;na końcu wiersza, aby pominąć drukowanie wyniku [ Odniesienie ].

Farhad Maleki
źródło
5
Nie dotyczy to kodu wewnątrz forpętli. Jakieś pomysły? Chcę tylko pomijać dane wyjściowe z określonych linii kodu w komórce, a nie wszystkie linie. Dzięki
Confounded
16

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

Możesz użyć io.capture_output :

from IPython.utils import io

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

aby stłumić (np. przechwycić) stdout i stderr dla tych linii w with-statement.

gdw2
źródło
Wielkie dzięki, doprowadzało mnie to do szału - mam funkcję uruchamiania, którą uruchamiam za każdym razem, gdy otwieram notebook, który dzwoni %autosavei chciałem stłumić jego wyjście. Pomyślałem, że to będzie proste - ale dziwnie, contextlib.redirect_stdouti sys.stdout = open(os.devnull, 'w')oba zawodzą (kończy się wydrukowaniem dodatkowej pustej linii). To powinna być akceptowana odpowiedź.
Luke Davis
1
To była moja ulubiona odpowiedź, ponieważ można stłumić część danych wyjściowych w komórce bez tłumienia całego.
Wolpertinger
-5

Jeśli ktoś jest zainteresowany wyczyszczeniem wszystkich wyników:

  1. Idź do komórki
  2. Idź do Wszystkie dane wyjściowe

Następnie wybierz dowolną opcję.

Yuqin Peng
źródło