python3 打印成字符串

python3 print to string

使用 Python 3,我有一个要移植到 GUI 的控制台应用程序。代码有一堆打印语句,像这样:

print(f1(), f2(), f3(), sep=getsep(), end=getend())

我想将这些调用转换成如下形式:

GuiPrintLine(f1(), f2(), f3(), sep=getsep(), end=getend())

每一行最终都使用一些(未定义的)GUI 框架呈现。

如果我可以将要打印的参数转换为打印通常会产生的字符串而没有实际打印到 sysout 的副作用,那么这很容易做到。换句话说,我需要这样的函数:

s = print_to_string(*args, **kwargs)

如何将一组参数格式化为 print(...) 生成与 print() 生成的输出相同的单个字符串?

我意识到我可以通过将所有 args 与 sep 和 ends 连接起来来模拟打印,但如果有的话,我更愿意使用内置解决方案。

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

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

感谢您的帮助!

通过字符串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