從Python 函數呼叫捕捉標準輸出
當使用修改物件並將統計資訊列印到stdout 的Python 函式庫時,可能需要擷取此輸出以進行進一步分析。然而,直接修改函數來傳回此類資訊可能並不總是可行。
為了解決這個問題,可以使用Capturing 上下文管理器:
<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>
可以使用Capturing 上下文管理器如下所示:
<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']
當無法直接修改do_something() 函數時,此方法提供了一種有效的解決方法來捕捉stdout 輸出。
以上是如何從 Python 函數呼叫捕獲標準輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!