Home  >  Article  >  Backend Development  >  How to Capture Standard Output in Python Scripts?

How to Capture Standard Output in Python Scripts?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-17 14:57:02919browse

How to Capture Standard Output in Python Scripts?

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn