【发布时间】:2017-02-10 21:47:33
【问题描述】:
使用 Python 3,我有一个要移植到 GUI 的控制台应用程序。该代码有一堆打印语句,如下所示:
print(f1(), f2(), f3(), sep=getsep(), end=getend())
我想将这些调用转换为:
GuiPrintLine(f1(), f2(), f3(), sep=getsep(), end=getend())
最终使用某些(未定义的)GUI 框架呈现每一行。
如果我可以将要打印的参数转换为 print 通常会产生的字符串,而没有实际打印到 sysout 的副作用,那么这很容易做到。换句话说,我需要一个这样的函数:
s = print_to_string(*args, **kwargs)
如何将 print(...) 的一组参数格式化为一个字符串,该字符串产生的输出与 print() 产生的输出相同?
我意识到我可以通过将所有 args 与 sep 和 ends 连接起来来模拟 print,但如果有内置解决方案,我更愿意使用它。
使用打印和重定向 sysout 没有吸引力,因为它需要修改应用程序的全局状态,并且 sysout 可能同时用于其他诊断。
这似乎在 Python 中应该是微不足道的,所以也许我只是遗漏了一些明显的东西。
感谢您的帮助!
【问题讨论】:
-
我不完全确定我是否理解 100%,但
''.join(args)是否满足您的需求? -
有点,但我不想假设任何关于 sep/end 的内容或存在的事情。我一直在想这样的事情可能会奏效:
kwargs['sep'].join(*args, kwargs[end]),但处理可能缺少 sep/end 会很复杂。 -
print和GuiPrintLine有什么区别? -
sep.join(args) + end似乎是最好的解决方案。 -
我想这还不清楚,如果你说你实际上并不想要 print 会产生的输出,你想在这里完成什么?
标签: python string python-3.x stringio