在函数内获取“print”输出结果

9

我正在使用一个函数库,其中一些函数会打印出我需要的数据:

def func():
   print "data"

我该如何调用这个函数并将打印出的数据存储到一个字符串中?

3
你不能...尝试使用return "data",这是唯一可行的方法。除非你想捕获另一个Python脚本的输出,那么你可以使用x = subprocess.Popen("python script.py", shell=True"),然后使用x.stdout.read()。可能(我是说可能...只是一念之间)可以使用eval()调用函数并捕获输出。但不建议这样做。 - Torxed
是的...好吧,我想避免改变库代码。如果真的没有其他办法,我将复制粘贴到我的代码中并使用“return”。 - WeaselFox
1
在使用Python3时,您可以重写print函数并将其收集到其他地方的数据。 - tobias_k
1
dis.dis() 也使用了 print;请参阅链接的重复内容,了解如何解决这个问题。 - Martijn Pieters
如果库是由C实现或启动了子进程,则需要在C级别重定向。请参见 如何防止C共享库在Python中打印stdout? - jfs
显示剩余2条评论
1个回答

10

如果您无法更改这些函数,您将需要重定向 sys.stdout

>>> import sys
>>> stdout = sys.stdout
>>> import StringIO
>>> s = StringIO.StringIO()
>>> sys.stdout = s
>>> print "hello"
>>> sys.stdout = stdout
>>> s.seek(0)
>>> s.read()
'hello\n'

我可以使用这个解决方案...虽然不是很优雅。谢谢。 - WeaselFox
如果你想在Python3中使用它,你应该将第三行改为"from io import StringIO",将第四行改为"s = StringIO()"。 - ccy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接