首頁  >  文章  >  後端開發  >  如何使用 I/O 操作來擷取 Python 腳本的輸出?

如何使用 I/O 操作來擷取 Python 腳本的輸出?

Susan Sarandon
Susan Sarandon原創
2024-10-17 14:49:29794瀏覽

How to Capture Output from a Python Script Using I/O Manipulation?

從腳本捕獲輸出

假設您有一個使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn