如何捕获 Python 函数调用的 stdout 输出?

Patricia Arquette
发布: 2024-11-03 13:57:02
原创
132 人浏览过

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学习者快速成长!