Heim >Backend-Entwicklung >Python-Tutorial >So erfassen Sie Programmausgaben effektiv in Python: Jenseits grundlegender Lösungen
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 in 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 prägnantere Lösung verfügbar Verwendung des Kontextmanagers contextlib.redirect_stdout:
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.
Das obige ist der detaillierte Inhalt vonSo erfassen Sie Programmausgaben effektiv in Python: Jenseits grundlegender Lösungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!