„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > So erfassen Sie Programmausgaben effektiv in Python: Jenseits grundlegender Lösungen

So erfassen Sie Programmausgaben effektiv in Python: Jenseits grundlegender Lösungen

Veröffentlicht am 08.11.2024
Durchsuche:114

How to Capture Program Output Effectively in Python: Beyond Basic Solutions

Erfassen der Programmausgabe: Jenseits naiver Lösungen

Bei der Python-Skripterstellung ist die Erfassung der Programmausgabe zur weiteren Verarbeitung ein häufiges Bedürfnis. Auch wenn naive Lösungen einfach erscheinen mögen, sind sie oft unzureichend. Betrachten Sie das folgende Skript, das nach stdout schreibt:

# writer.py
import sys

def write():
    sys.stdout.write("foobar")

Der Versuch, die Ausgabe mit dem folgenden Code zu erfassen, schlägt fehl:

# mymodule.py
from writer import write

out = write()
print(out.upper())

Um die Ausgabe effektiv zu erfassen, ist eine robustere Lösung erforderlich. Ein Ansatz besteht darin, den stdout-Stream des Systems zu ändern:

import sys
from cStringIO import StringIO

# Redirect stdout to a StringIO object
backup = sys.stdout
sys.stdout = StringIO()

# Perform the write operation
write()

# Retrieve and restore stdout
out = sys.stdout.getvalue()
sys.stdout.close()
sys.stdout = backup

# Process the captured output
print(out.upper())

Kontextmanager für Python 3.4:

Für Python 3.4 und höher ist eine einfachere und übersichtlichere Lösung mit der Kontextbibliothek verfügbar. Redirect_stdout-Kontextmanager:

from contextlib import redirect_stdout
import io

f = io.StringIO()
# Redirect stdout to f using the context manager
with redirect_stdout(f):
    help(pow)

# Retrieve captured output from f
s = f.getvalue()

Dieser elegante Ansatz vereinfacht den Ausgabeerfassungsprozess und erleichtert die Handhabung in Ihren Python-Skripten.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729147521 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3