捕获程序输出:超越简单的解决方案
在 Python 脚本中,捕获程序输出以进行进一步处理是一种常见的需求。虽然幼稚的解决方案可能看起来很简单,但它们常常达不到要求。考虑以下写入 stdout 的脚本:
# 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 脚本中处理。
以上是如何在 Python 中有效捕获程序输出:超越基本解决方案的详细内容。更多信息请关注PHP中文网其他相关文章!