Suppose you have a script that performs write operations using sys.stdout. An initial solution to capture the output and store it in a variable for further processing might be:
<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>
However, this approach fails to capture the output.
One possible solution is to modify the scripts as follows:
<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>
This approach uses a buffer to capture the output stream.
Starting with Python 3.4, there is a more concise way to capture output using the contextlib.redirect_stdout context manager:
<code class="python">from contextlib import redirect_stdout import io f = io.StringIO() with redirect_stdout(f): help(pow) s = f.getvalue()</code>
This solution is simpler and eliminates the need for managing backups and closing the stream manually.
The above is the detailed content of How to Capture Output from a Python Script Using I/O Manipulation?. For more information, please follow other related articles on the PHP Chinese website!