捕获程序输出:超越朴素的解决方案
在Python脚本中,捕获程序输出以进行进一步处理是一种常见的需求。虽然幼稚的解决方案可能看起来很简单,但它们常常达不到要求。考虑以下写入标准输出的脚本:
# writer.py import sys def write(): sys.stdout.write("foobar")
尝试使用以下代码捕获输出失败:
# mymodule.py from writer import write out = write() print(out.upper())
为了有效地捕获输出,需要更强大的解决方案。一种方法涉及修改系统的标准输出流:
import sys from cStringIO import StringIO # Redirect stdout to a StringIO object backup = sys.stdout sys.stdout = StringIO() # Perform the write operation write() # Retrieve and restore stdout out = sys.stdout.getvalue() sys.stdout.close() sys.stdout = backup # Process the captured output print(out.upper())
Python 3.4 的上下文管理器:
对于 Python 3.4 及更高版本,可以使用 contextlib 获得更简单、更简洁的解决方案。 redirect_stdout 上下文管理器:
from contextlib import redirect_stdout import io f = io.StringIO() # Redirect stdout to f using the context manager with redirect_stdout(f): help(pow) # Retrieve captured output from f s = f.getvalue()
这种优雅的方法简化了输出捕获过程,使其更容易在 Python 脚本中处理。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3