【问题标题】:Python print on lines that are not visible anymore on the terminal with ANSI escape codesPython 在终端上不再可见的行上使用 ANSI 转义码打印
【发布时间】:2016-12-13 20:42:53
【问题描述】:

我尝试用另一个替换给定行上打印的文本。 为此,我一直在使用 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 转义码或任何其他方法?

【问题讨论】:

  • 请注意,您可能应该为此使用cursestigetstr() 和朋友)。控制序列是特定于终端的(例如,CSI F 是经典 xterm 中的“结束”键)。在 Linux 上,CSI F将光标向上移动一个级别,您正在覆盖终端缓冲区中的字符......不再有任何行可以恢复

标签: python stdout sys ansi-escape


【解决方案1】:

简短:没有

更长:按照惯例,一旦数据离开可见屏幕,终端仿真器可能会将滚动到视线之外的数据留在只读回滚区域。

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

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

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

【讨论】:

  • 谢谢...这就是我害怕的!
猜你喜欢
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 2023-04-07
  • 2016-08-24
相关资源
最近更新 更多