Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erfasst man die Ausgabe einer Python-Funktion mit einem Kontextmanager?

Wie erfasst man die Ausgabe einer Python-Funktion mit einem Kontextmanager?

Linda Hamilton
Linda HamiltonOriginal
2024-11-03 12:31:03190Durchsuche

How to Capture Output from a Python Function with a Context Manager?

Abfangen der Ausgabe einer Python-Funktion mit Capturing

Oftmals geben Bibliotheken von Drittanbietern Informationen während der Ausführung auf stdout aus. Dies kann zwar beim Debuggen nützlich sein, kann aber auch die Ausgabe überladen und andere Prozesse stören. Um die Kontrolle über diese Ausgabe zu erlangen, sollten Sie erwägen, einen Kontextmanager zu nutzen, um sie zu erfassen.

Implementierung

from io import StringIO <br>import sys</p>
<p>class Capturing (Liste):</p>
<pre class="brush:php;toolbar:false">def __enter__(self):
    self._stdout = sys.stdout
    sys.stdout = self._stringio = StringIO()
    return self
def __exit__(self, *args):
    self.extend(self._stringio.getvalue().splitlines())
    del self._stringio    # free up some memory
    sys.stdout = self._stdout

Verwendung

Um die Ausgabe innerhalb eines bestimmten Codeblocks zu erfassen:

<code class="python">with Capturing() as output:
    do_something(my_object)</code>

Nachher Nach dem Block enthält die Ausgabevariable eine Liste aller auf stdout gedruckten Zeilen.

Erweiterte Techniken

  • Mehrfacherfassungen: Dieser Kontextmanager kann mehrmals verwendet werden, um die Ausgabe zu akkumulieren.
  • Integration mit contextlib.redirect_stdout() (Python 3.4): Dies bietet eine alternative Möglichkeit, eine Umleitung mithilfe von io.StringIO zu erreichen.

Das obige ist der detaillierte Inhalt vonWie erfasst man die Ausgabe einer Python-Funktion mit einem Kontextmanager?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:HauspreisvorhersageNächster Artikel:Hauspreisvorhersage