是否有方法将终端格式化输出打印到变量?
print 'a\bb'
--> 'b'
我想把字符串'b'变成一个变量 - 那该怎么做?
我正在处理来自telnet的文本字符串。因此,我想使用将要打印到屏幕的字符串。
所以我要找的是这样的:
simplify_string('a\bb') ==> 'b'
回车的另一个例子:
simplify_string('aaaaaaa\rbb') ==> 'bbaaaaa'
答案 0 :(得分:7)
这结果非常棘手,因为有一个很多的终端格式化命令(包括光标上/下/左/右命令,终端颜色代码,垂直和水平标签等)。 )。
因此,如果您想正确模拟终端,请获取终端模拟器! pyte
(pip install pyte
)实现与VT102兼容的内存中虚拟终端。因此,您可以为其提供一些文本,然后从中获取格式化文本:
import pyte
screen = pyte.Screen(80, 24)
stream = pyte.ByteStream()
stream.attach(screen)
stream.feed('xyzzz\by\rfoo')
print ''.join(c.data for c in screen[0]).rstrip()
# prints foozy
要处理多行,只需加入文本中的所有行(例如'\n'.join(''.join(c.data for c in row).rstrip() for row in screen).rstrip('\n')
)。
请注意,这不会处理尾随空格,但无论如何在真实终端上都无法区分。