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(以及一些复制该功能的软件)允许您清除 回滚。但是你不太可能找到让你(在程序控制下)回滚和修改回滚区域的东西。
应用程序开发人员管理可见显示,使用他们自己的数据在上面写行,而不是依赖终端提供看不见的信息。
我尝试用另一行替换给定行上打印的文本。 为此,我一直在使用 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(以及一些复制该功能的软件)允许您清除 回滚。但是你不太可能找到让你(在程序控制下)回滚和修改回滚区域的东西。
应用程序开发人员管理可见显示,使用他们自己的数据在上面写行,而不是依赖终端提供看不见的信息。