Heim >Backend-Entwicklung >Python-Tutorial >Wie erfasst man die Standardausgabe in Python-Skripten?

Wie erfasst man die Standardausgabe in Python-Skripten?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-17 14:57:021003Durchsuche

How to Capture Standard Output in Python Scripts?

Erfassen der Skript-Standardausgabe

In einem Szenario, in dem ein Skript bestimmte Aufgaben ausführt, wie z. B. das Schreiben von Daten in seine Standardausgabe, erfasst es diese Ausgabe kann für die weitere Verarbeitung von entscheidender Bedeutung sein. Ein gängiger Ansatz besteht darin, zu versuchen, die Ausgabe in einer Variablen zu speichern, wie im folgenden Beispiel dargestellt:

<code class="python"># writer.py
import sys

def write():
    sys.stdout.write("foobar")</code>
<code class="python"># mymodule.py
from writer import write

out = write()
print(out.upper())</code>

Dieser Ansatz erfasst jedoch die Ausgabe des Skripts nicht. Eine alternative Lösung, die ein StringIO-Objekt und eine Umgebungseinrichtung verwendet, erfasst erfolgreich die Ausgabe:

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

# setup the environment
backup = sys.stdout

# ####
sys.stdout = StringIO()     # capture output
write()
out = sys.stdout.getvalue() # release output
# ####

sys.stdout.close()  # close the stream
sys.stdout = backup # restore original stdout

print(out.upper())   # post processing</code>

Python 3.4-Lösung

Für Python-Versionen 3.4 und höher eine weitere Ein unkomplizierter Ansatz ist mit dem Kontextmanager contextlib.redirect_stdout verfügbar:

<code class="python">from contextlib import redirect_stdout
from io import StringIO

f = StringIO()
with redirect_stdout(f):
    help(pow)
s = f.getvalue()</code>

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