捕獲程式輸出:超越簡單的解決方案
在Python 腳本中,捕獲程序輸出以進行進一步處理是一種常見的需求。雖然幼稚的解決方案看起來很簡單,但它們常常達不到要求。考慮以下寫入 stdout 的腳本:
# writer.py import sys def write(): sys.stdout.write("foobar")
嘗試使用以下程式碼擷取輸出失敗:
# mymodule.py from writer import write out = write() print(out.upper())
為了有效擷取輸出,需要更強大的解決方案。一種方法涉及修改系統的標準輸出流:
import sys from cStringIO import StringIO # Redirect stdout to a StringIO object backup = sys.stdout sys.stdout = StringIO() # Perform the write operation write() # Retrieve and restore stdout out = sys.stdout.getvalue() sys.stdout.close() sys.stdout = backup # Process the captured output print(out.upper())
Python 3.4 的上下文管理器:
對於Python 3.4 及更高版本,可以使用更多版本簡單、更簡潔的解決方案使用contextlib.redirect_stdout 上下文管理器:
from contextlib import redirect_stdout import io f = io.StringIO() # Redirect stdout to f using the context manager with redirect_stdout(f): help(pow) # Retrieve captured output from f s = f.getvalue()
這種優雅的方法簡化了輸出捕獲過程,使其更容易在Python 腳本中處理。
以上是如何在 Python 中有效捕捉程式輸出:超越基本解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!