假設您有一個使用 sys.stdout 執行寫入操作的腳本。捕獲輸出並將其儲存在變數中以供進一步處理的初始解決方案可能是:
<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>
但是,此方法無法捕獲輸出。
一個可能的解決方案是修改腳本如下:
<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 開始,有一種更簡潔的方法使用contextlib.redirect_stdout 來捕獲輸出上下文管理器:
<code class="python">from contextlib import redirect_stdout import io f = io.StringIO() with redirect_stdout(f): help(pow) s = f.getvalue()</code>
此解決方案更簡單,無需管理備份和手動關閉流。
以上是如何使用 I/O 操作來擷取 Python 腳本的輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!