2014-02-20 45 views
2

我正在调用一个函数并试图捕获它输出的输出,但在3.3中我无法访问StringIO。有没有其他的方法呢?捕获在3.3中打印出的Python函数吗?

+0

[subprocess.check_output(http://docs.python.org/2/library/subprocess.html) –

+4

这是一个有点混乱,一方面是因为3.3确实有'io.StringIO',因为不清楚'StringIO'如何捕获输出,除非函数接受一个类似文件的输出目标,或者重新绑定'print'或其他东西。 – DSM

+0

谢谢......不知道为什么我之前找不到StringIO :) – user2836292

回答

0

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

但是,它听起来好像你正试图在(例如)单元测试中对sys.stdout进行猴子补丁。除非您确定需要,否则我不会在您的测试中进行此操作;它会使难以维护的测试。我建议你的代码需要重构 - 考虑改变你的函数返回一个字符串,客户可以在闲暇时打印(或写入文件,或在GUI上显示,或...)。

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 
+0

谢谢......不知道为什么我找不到StringIO之前:) – user2836292