Wie erfasst man die Ausgabe eines Python-Skripts mithilfe der E/A-Manipulation?

Susan Sarandon
Freigeben: 2024-10-17 14:49:29
Original
718 Leute haben es durchsucht

How to Capture Output from a Python Script Using I/O Manipulation?

Ausgabe eines Skripts erfassen

Angenommen, Sie haben ein Skript, das Schreibvorgänge mithilfe von sys.stdout ausführt. Eine erste Lösung, um die Ausgabe zu erfassen und zur weiteren Verarbeitung in einer Variablen zu speichern, könnte wie folgt aussehen:

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

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

# mymodule.py
from writer import write

out = write()
print(out.upper())</code>
Nach dem Login kopieren

Dieser Ansatz kann die Ausgabe jedoch nicht erfassen.

Eine mögliche Lösung besteht darin, sie zu ändern die Skripte wie folgt:

<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>
Nach dem Login kopieren

Dieser Ansatz verwendet einen Puffer, um den Ausgabestream zu erfassen.

Ab Python 3.4 gibt es eine präzisere Möglichkeit, die Ausgabe mithilfe von contextlib.redirect_stdout zu erfassen Kontextmanager:

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

f = io.StringIO()
with redirect_stdout(f):
    help(pow)
s = f.getvalue()</code>
Nach dem Login kopieren

Diese Lösung ist einfacher und macht die Verwaltung von Backups und das manuelle Schließen des Streams überflüssig.

Das obige ist der detaillierte Inhalt vonWie erfasst man die Ausgabe eines Python-Skripts mithilfe der E/A-Manipulation?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!