捕獲程式輸出:超越樸素的解決方案
捕獲程式輸出:超越樸素的解決方案
# writer.py import sys def write(): sys.stdout.write("foobar")在Python腳本中,捕獲程式輸出以進行進一步處理是一種常見的需求。雖然幼稚的解決方案看起來很簡單,但它們常常達不到要求。考慮以下寫入標準輸出的腳本:# writer.py 導入系統 def write(): sys.stdout.write("foobar")
# writer.py import sys def write(): sys.stdout.write("foobar")嘗試使用以下程式碼擷取輸出失敗:# mymodule.py 從作家匯入寫入 輸出 = 寫入() print(out.upper())
# writer.py import sys def write(): sys.stdout.write("foobar")為了有效地捕捉輸出,需要更強大的解決方案。一種方法涉及修改系統的標準輸出流:
import sys 從 cStringIO 導入 StringIO # 將標準輸出重定向到 StringIO 物件 備份= sys.stdout sys.stdout = StringIO() # 執行寫入操作 寫() # 檢索並恢復標準輸出 輸出 = sys.stdout.getvalue() sys.stdout.close() sys.stdout = 備份 # 處理捕獲的輸出 print(out.upper())
Python 3.4 的上下文管理器:
# writer.py import sys def write(): sys.stdout.write("foobar")
Python 3.4 的上下文管理器:
對於Python 3.4 及更高版本,可以使用contextlib 獲得更簡單、更簡潔的解決方案。 redirect_stdout 上下文管理器:
from contextlib import redirect_stdout 導入io f = io.StringIO() # 使用上下文管理器將 stdout 重新導向到 f 使用redirect_stdout(f): 幫助(戰俘) # 檢索 f 捕獲的輸出 s = f.getvalue()這種優雅的方法簡化了輸出捕獲過程,使其更容易在 Python 腳本中處理。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3