Capturing Script Standard Output
In a scenario where a script performs specific tasks, such as writing data to its standard output, capturing that output can be crucial for further processing. A common approach involves attempting to store the output in a variable, as illustrated in the following example:
<code class="python"># writer.py import sys def write(): sys.stdout.write("foobar")</code>
<code class="python"># mymodule.py from writer import write out = write() print(out.upper())</code>
However, this approach fails to capture the script's output. An alternative solution, using a StringIO object and environment setup, successfully captures the output:
<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>
Python 3.4 Solution
For Python versions 3.4 and above, a more straightforward approach is available using the contextlib.redirect_stdout context manager:
<code class="python">from contextlib import redirect_stdout from io import StringIO f = StringIO() with redirect_stdout(f): help(pow) s = f.getvalue()</code>
The above is the detailed content of How to Capture Standard Output in Python Scripts?. For more information, please follow other related articles on the PHP Chinese website!