Heim >Backend-Entwicklung >Python-Tutorial >Wie erfasst man die Standardausgabe von Python-Funktionsaufrufen?

Wie erfasst man die Standardausgabe von Python-Funktionsaufrufen?

Susan Sarandon
Susan SarandonOriginal
2024-11-03 13:20:03771Durchsuche

How to Capture Standard Output from Python Function Calls?

Erfassen der Standardausgabe von Python-Funktionsaufrufen

Bei der Verwendung von Python-Bibliotheken, die Objekte ändern und Statistiken auf stdout ausgeben, kann dies erforderlich sein Erfassen Sie diese Ausgabe zur weiteren Analyse. Es ist jedoch möglicherweise nicht immer möglich, die Funktion direkt zu ändern, um solche Informationen zurückzugeben.

Um dieses Problem zu beheben, kann man den Capturing-Kontextmanager verwenden:

<code class="python">from io import StringIO
import sys

class Capturing(list):
    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</code>

Der Capturing-Kontextmanager kann verwendet werden wie folgt:

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

Nach dem Funktionsaufruf enthält die Ausgabeliste die von der Funktion gedruckten Zeilen.

Diese Technik kann mehrmals angewendet werden und die Ergebnisse können verkettet werden:

<code class="python">with Capturing() as output:
    print('hello world')

print('displays on screen')

with Capturing(output) as output:  # note the constructor argument
    print('hello world2')

print('done')
print('output:', output)</code>

Ausgabe:

displays on screen
done
output: ['hello world', 'hello world2']

Dieser Ansatz bietet eine effektive Problemumgehung für die Erfassung der Standardausgabe, wenn es nicht möglich ist, die Funktion do_something() direkt zu ändern.

Das obige ist der detaillierte Inhalt vonWie erfasst man die Standardausgabe von Python-Funktionsaufrufen?. 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