5

有没有办法将终端格式化的输出打印到变量?

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

我想要那个字符串'b'到一个变量 - 那么怎么做呢?

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

所以我正在寻找的是这样的:

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

另一个带回车的例子:

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

1 回答 1

8

这变得相当棘手,因为有很多终端格式化命令(包括例如光标上/下/左/右命令、终端颜色代码、垂直和水平制表符等)。

因此,如果您想正确模拟终端,请获取终端模拟器!pyte( pip install pyte) 实现了一个与 VT102 兼容的内存虚拟终端。所以,你可以给它一些文本,然后从中获取格式化的文本:

import pyte

screen = pyte.Screen(80, 24)
stream = pyte.ByteStream(screen)
stream.feed(b'xyzzz\by\rfoo')
# print the first line of text ('foozy')
print(screen.display[0].rstrip())

要处理多行,只需连接文本中的所有行(例如'\n'.join(row.rstrip() for row in screen.display).rstrip())。

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

于 2013-10-07T11:34:00.277 回答