Terminal 在终端的回滚缓冲区中编辑一行
我有一个处理分层组织的数据集的脚本。它为每条记录打印一行。该行在开始处理该记录时首先打印,然后在处理该记录(及其所有子项)完成时更新:Terminal 在终端的回滚缓冲区中编辑一行,terminal,Terminal,我有一个处理分层组织的数据集的脚本。它为每条记录打印一行。该行在开始处理该记录时首先打印,然后在处理该记录(及其所有子项)完成时更新: completed a completed a.a completed a.b completed a.b.a completed a.b.b completed a.b.c completed a.c processing b completed b.a processing b.b ... 我使用终端转义序列更新
completed a
completed a.a
completed a.b
completed a.b.a
completed a.b.b
completed a.b.c
completed a.c
processing b
completed b.a
processing b.b
...
我使用终端转义序列更新行,以在写入之前移动终端光标“\033[A”
上升到N行,“\033[K”
擦除到当前行的末尾,“\033[s”
保存当前光标位置,“\033[u”
恢复保存的光标位置
因此,要向上移动2行,请将现有行替换为“已完成的b”,并返回到上一个光标位置:
# save position, go up 2 lines, clear to end of line, insert text, return to saved position
print "\033[s\033[2A\033[Kcompleted b\033[u"
在我尝试过的每个终端中,只要我只想更新屏幕上的一行,这种方法就行。但是,如果一条记录有很多子记录,有时该记录的行已从屏幕上滚下。在这种情况下,上述方法不起作用--“\033[a”转义序列似乎只会将光标移动到视口的顶部——它无法进入历史记录。有没有标准的方法来更新命令行应用程序中已从屏幕上滚动的行