捕获Python函数在3.3中打印出来的内容?

时间:2014-02-20 17:58:24

标签: python

我正在调用一个函数并尝试捕获它打印出来的输出,但在3.3中我无法访问StringIO。还有另一种解决方法吗?

3 个答案:

答案 0 :(得分:3)

在Python 3中,StringIO位于io包中。所以你仍然可以用它来捕获输出:

>>> def someMagicFunction ():
        print('foo bar baz')

>>> import io, sys
>>> original = sys.stdout
>>> sys.stdout = new = io.StringIO()
>>> someMagicFunction()
>>> sys.stdout = original
>>> print(new.getvalue())
foo bar baz

答案 1 :(得分:0)

答案 2 :(得分:0)

StringIO已在Python 3中移动。请尝试from io import StringIO。您还需要决定是否需要StringIOBytesIO

然而,听起来好像你正在尝试对sys.stdout中的{{1}}进行单一测试。除非你确定需要,否则我不建议你在测试中这样做;它会使难以维护的测试成为可能。我建议您的代码需要重构 - 考虑更改函数以返回一个字符串,客户可以在闲暇时打印(或写入文件,或在GUI上显示,或......)。