我有一个函数(在某个项目中)它打印结果。当我从命令行或另一个python项目中调用它时,它会在终端上打印输出。但我想将所有打印结果存储在一个变量中,如下所示:
output = function_name(function_args)
而不是在终端上打印结果我想将它们存储在output
变量中。
另外,main函数返回一些东西(只是一个数字作为状态)作为我不想要那个数字的结果。
答案 0 :(得分:1)
您可以通过重新绑定sys.stdout
:
>>> def foo():
... print('potato')
...
>>> import sys, io
>>> sys.stdout = io.StringIO()
>>> foo()
>>> val = sys.stdout.getvalue()
>>> sys.stdout = sys.__stdout__ # restores original stdout
>>> print(val)
potato
要想有更好的方法,请考虑编写上下文管理器。如果您使用的是Python 3.4+,则为already been written for you。
>>> from contextlib import redirect_stdout
>>> f = io.StringIO()
>>> with redirect_stdout(f):
... foo()
...
>>> print(f.getvalue())
potato
答案 1 :(得分:0)
明智的解决方案很简单明了:修复函数以便返回正确的数据而不是打印它。否则,你可以使用wim发布的hack,但假设你在错误的功能上使用这种错综复杂的解决方案属于“WTF”类别。
当然,如果您没有使用该功能的代码,或者只需要5分钟的一次性脚本,那么捕获sys.stdout
是一个方便的后备。