将函数输出打印分配给python中的变量

时间:2017-01-05 19:33:57

标签: python terminal output

我有一个函数(在某个项目中)它打印结果。当我从命令行或另一个python项目中调用它时,它会在终端上打印输出。但我想将所有打印结果存储在一个变量中,如下所示:

output = function_name(function_args)

而不是在终端上打印结果我想将它们存储在output变量中。 另外,main函数返回一些东西(只是一个数字作为状态)作为我不想要那个数字的结果。

2 个答案:

答案 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是一个方便的后备。