如何捕捉 Python 函數呼叫的 stdout 輸出?

Patricia Arquette
發布: 2024-11-03 13:57:02
原創
133 人瀏覽過

How to Capture stdout Output for Python Function Calls?

擷取 Python 函式呼叫的 Stdout 輸出

使用記錄到 stdout 的函式庫時,擷取其輸出可以深入了解其行為。本文探討了一種在 Python 中實作任意函數呼叫的 stdout 捕獲的解決方法。

上下文管理器解決方案

要捕獲特定程式碼區塊內的stdout 輸出,請考慮使用下列上下文管理器:

<code class="python">from io import StringIO
import sys

class Capturing(list):
    def __enter__(self):
        self._stdout = sys.stdout
        sys.stdout = self._stringio = StringIO()
        return self
    def __exit__(self, *args):
        self.extend(self._stringio.getvalue().splitlines())
        del self._stringio    # free up some memory
        sys.stdout = self._stdout</code>
登入後複製

要使用此上下文管理器,只需包裝函數呼叫即可:

<code class="python">with Capturing() as output:
    do_something(my_object)</code>
登入後複製

輸出變數現在將包含函數呼叫列印的行列表。

進階用法

上下文管理器可以多次使用,並且結果將被串聯。例如:

<code class="python">with Capturing() as output:
    print('hello world')

print('displays on screen')

with Capturing(output) as output:  # note the constructor argument
    print('hello world2')

print('done')
print('output:', output)</code>
登入後複製

這將產生輸出:

displays on screen                     
done                                   
output: ['hello world', 'hello world2']
登入後複製

在 Python 3.4 及更高版本中, contextlib.redirect_stdout() 提供了另一種重定向 stdout 的方法。然而,捕獲上下文管理器提供了既是清單又是上下文管理器的優勢。

以上是如何捕捉 Python 函數呼叫的 stdout 輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!