Capturing stdout Output from Scripts in Python
When working with external scripts, it often becomes necessary to capture their stdout output for further processing. A common approach is to use the write() function to print the output, which can then be stored in a variable. However, this approach doesn't always work, as exemplified by the following script:
<code class="python"># module writer.py import sys def write(): sys.stdout.write("foobar")</code>
To capture the output of the write() function, a solution involving the cStringIO module was proposed:
<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>
However, there are more efficient and Pythonic ways to achieve this goal:
Using contextlib.redirect_stdout (Python 3.4+)
This method utilizes the contextlib.redirect_stdout context manager to temporarily redirect stdout output to a StringIO object:
<code class="python">from contextlib import redirect_stdout import io f = io.StringIO() with redirect_stdout(f): help(pow) s = f.getvalue()</code>
Using io.StringIO directly
Another approach is to directly create a StringIO object and manually route stdout output to it:
<code class="python">import io output = io.StringIO() sys.stdout = output write() sys.stdout.seek(0) captured_output = output.read()</code>
By implementing these methods, developers can effectively capture and process script output without resorting to complex workarounds.
以上是如何在 Python 中擷取腳本 stdout 輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!