2016-12-13 97 views
0

我尝试用另一行替换给定行上打印的文本。为此,我一直在使用ANSI转义码。 我的问题是何时被替换的行在屏幕上不再可见(但通过向上滚动窗口仍然可见),我似乎无法修改它了。 这里是我的问题的一个简单的独立例如:Python打印行上不再可见的终端上使用ANSI转义码

import os 

nb_lines_term = int(os.popen('stty size', 'r').read().split()[0]) 

tot_lines = nb_lines_term + 5 
for i in range(tot_lines): 
    print 'line', tot_lines - i 

line_to_replace = nb_lines_term + 2 
new_str = "\033[F" * line_to_replace # go u 
new_str += 'replacing line ' + str(line_to_replace) 
new_str += "\033[E" * (line_to_replace - 1) # go back down 
print new_str 

是否有仍然可以访问行的方法吗?通过ANSI转义代码或任何其他方法?

+1

请注意,您应该使用['curses'](https://docs.python.org/2/library/curses.html)('tigetstr()'和朋友)。控制序列是特定于终端的(例如'CSI F'是经典xterm中的“结束”密钥)。在Linux上,'CSI F'将光标移动到某一级别,并且您正在覆盖终端缓冲区中的字符......没有线路可以恢复 – dhke

回答

1

短:没有

长:按照惯例,一旦数据已经离开了可视屏幕,终端模拟器可以离开这只读回溯地区的滚动的视线之外的数据。

这反映了硬件终端对仿真器的适应性。很少有硬件终端提供在更广泛的区域进行平移(并且很少提供任何方式来查看滚动不见的数据)。所以标准化没有提供这种功能,因为现有的控制序列处理了可见的屏幕。

当然有例外(Hewlett Packard提出了一些有趣的终端,但您无法找到仿真器)。 xterm(以及一些复制该功能)可以让你清除的回卷。但是你不太可能找到让你(在程序控制下)回滚并修改回滚区域的东西。

应用程序开发人员管理可见显示器,使用他们自己的数据编写线路,而不是依赖终端提供那种不可见的信息。

+0

谢谢......这正是我所害怕的! –