【问题标题】:Deleting multiple lines of terminal output using ruby使用 ruby​​ 删除多行终端输出
【发布时间】:2013-02-04 20:10:44
【问题描述】:

我希望能够将两行输出到终端,然后将它们都删除。我知道你可以通过做类似的事情来做到这一点

print "\b"*whatever

但我想做更多这样的事情:

[1, 2, 3, 4, 5].each do |item|
    # code to delete the previous two lines
    print item.to_s + "\nHello!"
end

输出将很快经过以下所有操作

1
Hello!
2
Hello!
3
Hello!
4
Hello!
5
Hello!

但到最后,最终的迭代将是你所看到的一切。

【问题讨论】:

    标签: ruby command-line io


    【解决方案1】:

    好吧,对于简单的事情,如果你可以假设一个 ANSI 兼容的终端(通常是一个不错的选择),你可以直接输出ANSI codes。例如,

     5.times do |item|
        print "\r" + ("\e[A\e[K"*3) if item > 0
        puts "#{item+1}\nHello!"
     end
    

    \r 将光标移动到行首,\e[A 将光标上移一行,\e[K 从光标位置清除到行尾。如果您不需要屏幕下方的任何内容,您也可以在将光标移至所需位置后发送\e[J;这会一直清除到屏幕的末尾。

    要了解更复杂的内容,您可以先查看the Highline gem

    【讨论】:

      猜你喜欢
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 2015-09-20
      相关资源
      最近更新 更多