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.
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