C printf术语进度显示,下一行显示错误消息

时间:2013-10-08 20:53:45

标签: c terminal

对于长时间运行的任务,我希望有一个进度显示。我目前在\33[2K\r命令的开头使用printf,最后没有换行符或任何内容。我不喜欢这种方法的是,打印到同一终端的消息(例如,stderr没有重定向)出现在行的末尾,而不是新行。

如果我将\r放在进度显示的末尾,其他消息(所有消息都以\n终止)会在视觉上覆盖进度显示,如果它们比那些短,则会混淆剩余。此外,我不想让/不能调整打印其他消息的行,因为其中一些来自外部库。

如果之后我的进度显示会继续显示在新行上,我就不会遇到问题,但我希望其他消息显示在他们自己的行上(主要是错误消息,但我'我试图尽可能优雅地恢复,所以这个过程将在大部分时间继续进行)

任何想法?

我不需要移植性,如果它只在linux bash上运行,那对我来说没问题。

更新:为了更好地展示我要求的内容:

目前我可以这样做:

status1ERR
status2

或者

ERRtus1
status2

或者

status1
status2  <--- ERR is overriden by status2 here

但我想要的是:

status1
ERR
status2

或者

ERR      
status2

在最后一个例子中,ERR覆盖了一个完整的状态行 - 我知道我可以清除前面提到的VT100字符序列的行,但是我无法改变一些错误消息,所以它需要一直使用它们格式为error message\n

2 个答案:

答案 0 :(得分:1)

哇。这是我过去的爆炸。

您可以使用ANSI或VT100字符序列进行一些光标定位。 这将让您分离屏幕上的输出类型。 这是一个很好的入门页面:http://wiki.bash-hackers.org/scripting/terminalcodes

答案 1 :(得分:0)

只需在错误消息的开头使用\n即可。当然,如果你调用一些产生stderr输出的其他代码,它也不起作用。