从 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中文网其他相关文章!