使用Python 3,我有一个要移植到GUI的控制台应用程序。该代码具有许多打印语句,如下所示:
print(f1(), f2(), f3(), sep=getsep(), end=getend())
我想将这些调用转换为:
GuiPrintLine(f1(), f2(), f3(), sep=getsep(), end=getend())
每行最终都使用某些(未定义的)GUI框架进行渲染。
如果我可以将print的参数转换为print通常会产生的字符串,而没有实际打印到sysout的副作用,则这很容易做到。换句话说,我需要一个这样的函数:
s = print_to_string(*args, **kwargs)
如何格式化一组参数以将print(...)转换为一个字符串,该字符串产生与print()相同的输出?
我意识到我可以通过将所有arg与sep和end连接起来来模拟打印,但是如果有的话,我更喜欢使用内置解决方案。
使用打印和重定向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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句