有没有方法将终端格式化输出打印到变量?
print 'a\bb'
--> 'b'
Run Code Online (Sandbox Code Playgroud)
我希望字符串'b'变量 - 所以怎么做?
我正在使用来自telnet的文本字符串.因此,我想使用将打印到屏幕的字符串.
所以我要找的是这样的:
simplify_string('a\bb') ==> 'b'
Run Code Online (Sandbox Code Playgroud)
回车的另一个例子:
simplify_string('aaaaaaa\rbb') ==> 'bbaaaaa'
Run Code Online (Sandbox Code Playgroud)
事实证明这是非常棘手的,因为有很多终端格式化命令(包括例如光标向上/向下/向左/向右命令,终端颜色代码,垂直和水平标签等).
因此,如果您想正确模拟终端,请获取终端模拟器!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
Run Code Online (Sandbox Code Playgroud)
要处理多行,只需加入文本中的所有行(例如'\n'.join(''.join(c.data for c in row).rstrip() for row in screen).rstrip('\n')).
请注意,这不会处理尾随空格,但无论如何在真实终端上都无法区分.