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