您可以通过临时重定向
sys.stdout到一个
StringIO对象来轻松捕获标准输出,如下所示:
import StringIOimport sysdef foo(inStr): print "hi"+inStrdef test_foo(): capturedOutput = StringIO.StringIO() # Create StringIO object sys.stdout = capturedOutput # and redirect stdout. foo('test') # Call unchanged function. sys.stdout = sys.__stdout__ # Reset redirect. print 'Captured', capturedOutput.getvalue() # Now works as before.test_foo()该程序的输出为:
Captured hitest
说明重定向成功捕获了输出,并且您能够将输出流还原到开始捕获之前的状态。
请注意,上面的代码针对Python 2.7,如问题所示。Python 3稍有不同:
import ioimport sysdef foo(inStr): print ("hi"+inStr)def test_foo(): capturedOutput = io.StringIO() # Create StringIO object sys.stdout = capturedOutput # and redirect stdout. foo('test') # Call function. sys.stdout = sys.__stdout__ # Reset redirect. print ('Captured', capturedOutput.getvalue()) # Now works as before.test_foo()


