3 回答
TA贡献1805条经验 获得超10个赞
设置stdout是一种合理的方法。另一个是将其作为另一个进程来运行:
import subprocess
proc = subprocess.Popen(["python", "-c", "import writer; writer.write()"], stdout=subprocess.PIPE)
out = proc.communicate()[0]
print out.upper()
TA贡献1895条经验 获得超7个赞
这是代码的上下文管理器版本。它产生两个值的列表。第一个是stdout,第二个是stderr。
import contextlib
@contextlib.contextmanager
def capture():
import sys
from cStringIO import StringIO
oldout,olderr = sys.stdout, sys.stderr
try:
out=[StringIO(), StringIO()]
sys.stdout,sys.stderr = out
yield out
finally:
sys.stdout,sys.stderr = oldout, olderr
out[0] = out[0].getvalue()
out[1] = out[1].getvalue()
with capture() as out:
print 'hi'
TA贡献1780条经验 获得超1个赞
对于未来的访问者:Python 3.4 contextlib 通过上下文管理器直接提供了此功能(请参阅Python contextlib help)redirect_stdout:
from contextlib import redirect_stdout
import io
f = io.StringIO()
with redirect_stdout(f):
help(pow)
s = f.getvalue()
添加回答
举报