首页  >  文章  >  后端开发  >  如何使用 I/O 操作捕获 Python 脚本的输出?

如何使用 I/O 操作捕获 Python 脚本的输出?

Susan Sarandon
Susan Sarandon原创
2024-10-17 14:49:29720浏览

How to Capture Output from a Python Script Using I/O Manipulation?

从脚本捕获输出

假设您有一个使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn