如何将终端格式化输出打印到变量

时间:2013-10-07 11:02:08

标签: python

是否有方法将终端格式化输出打印到变量?

print 'a\bb'
--> 'b'

我想把字符串'b'变成一个变量 - 那该怎么做?

我正在处理来自telnet的文本字符串。因此,我想使用将要打印到屏幕的字符串。

所以我要找的是这样的:

simplify_string('a\bb') ==> 'b'

回车的另一个​​例子:

simplify_string('aaaaaaa\rbb') ==> 'bbaaaaa'

1 个答案:

答案 0 :(得分:7)

这结果非常棘手,因为有一个很多的终端格式化命令(包括光标上/下/左/右命令,终端颜色代码,垂直和水平标签等)。 )。

因此,如果您想正确模拟终端,请获取终端模拟器! pytepip 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'))。

请注意,这不会处理尾随空格,但无论如何在真实终端上都无法区分。