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

Linda Hamilton
Freigeben: 2024-11-03 12:31:03
Original
189 Leute haben es durchsucht

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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
Nach dem Login kopieren

Verwendung

Um die Ausgabe innerhalb eines bestimmten Codeblocks zu erfassen:

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

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage