假设您有一个使用 sys.stdout 执行写入操作的脚本。捕获输出并将其存储在变量中以供进一步处理的初始解决方案可能是:
<code class="python"># writer.py import sys def write(): sys.stdout.write("foobar") # mymodule.py from writer import write out = write() print(out.upper())</code>
但是,此方法无法捕获输出。
一种可能的解决方案是修改脚本如下:
<code class="python">import sys from cStringIO import StringIO # setup the environment backup = sys.stdout # #### sys.stdout = StringIO() # capture output write() out = sys.stdout.getvalue() # release output # #### sys.stdout.close() # close the stream sys.stdout = backup # restore original stdout print(out.upper()) # post processing</code>
此方法使用缓冲区来捕获输出流。
从 Python 3.4 开始,有一种更简洁的方法使用 contextlib.redirect_stdout 来捕获输出上下文管理器:
<code class="python">from contextlib import redirect_stdout import io f = io.StringIO() with redirect_stdout(f): help(pow) s = f.getvalue()</code>
此解决方案更简单,无需管理备份和手动关闭流。
以上是如何使用 I/O 操作捕获 Python 脚本的输出?的详细内容。更多信息请关注PHP中文网其他相关文章!