python3打印到字符串

时间:2016-10-03 01:06:29

标签: python string python-3.x stringio

使用Python 3,我有一个控制台应用程序,我正在移植到GUI。代码有一堆打印语句,如下所示:

print(' ', 'p', ' ', sep='', end='')

(实际上,位置参数实际上是从函数返回的,并且可能有多于或少于3,如下所示:

print(f1(), f2(), f3(), sep='', end='')

我想将这些调用转换为:

GuiPrintLine(' ', 'p', ' ', sep='', end='')

其中每一行最终都是使用GUI框架呈现的。

如果我可以将参数转换为字符串,这很容易做到。我想将参数列表格式化为单个字符串,打印通常会输出如下:

def GuiPrintLine(*args, **kwargs):
    s = text.format(*args, **kwargs)
    # ... then display the string on the gui ...

但是这需要格式字符串(文本)。有一种简单的方法可以自动生成与打印功能相同的输出吗?我意识到我可以通过用sep和end结束所有args来模拟打印,但我更愿意使用内置的解决方案(如果有的话)。

使用打印和重定向sysout是没有吸引力的,因为它需要修改应用程序的全局状态,sysout可能同时用于其他诊断。

似乎这在Python中应该是微不足道的,所以也许我只是遗漏了一些明显的东西。

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

通过字符串io找到答案。有了这个,我不必模拟Print对sep / end的处理,甚至检查是否存在。

import io

def print_to_string(*args, **kwargs):
    output = io.StringIO()
    print(*args, file=output, **kwargs)
    contents = output.getvalue()
    output.close()
    return contents