Python 使用 ANSI 转义码在终端上不再可见的行上打印

Python print on lines that are not visible anymore on the terminal with ANSI escape codes

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

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 = "3[F" * line_to_replace  # go u
new_str += 'replacing line ' + str(line_to_replace)
new_str += "3[E" * (line_to_replace - 1)  # go back down
print new_str

还有办法接入线路吗?通过 ANSI 转义码或任何其他方法?

短:没有

更长:按照惯例,一旦数据离开可见屏幕,终端仿真器 可能会以 read-only回滚区域。

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

当然也有例外(惠普制作了一些有趣的终端,但您找不到模拟器)。 xterm(以及一些复制该功能的软件)允许您清除 回滚。但是你不太可能找到让你(在程序控制下)回滚和修改回滚区域的东西。

应用程序开发人员管理可见显示,使用他们自己的数据在上面写行,而不是依赖终端提供看不见的信息。