C printf术语进度显示,下一行显示错误消息
对于长时间运行的任务,我希望有一个进度显示。我目前在C printf术语进度显示,下一行显示错误消息,c,terminal,C,Terminal,对于长时间运行的任务,我希望有一个进度显示。我目前在printf命令的开头使用\33[2K\r,结尾没有换行符或任何东西。我不喜欢这种方法,因为打印到同一终端的消息(例如,没有重定向的stderr)出现在行的末尾,而不是新的 如果我将\r放在进度显示的末尾,其他消息(均以\n结尾)将在视觉上覆盖进度显示,如果长度小于该值,则会与剩余内容混淆。此外,我不想/无法调整打印这些其他消息的行,因为其中一些来自外部库 如果以后我的进度显示会继续显示在新行上,我没有问题,但我希望其他消息会显示在它们自己的行
printf
命令的开头使用\33[2K\r
,结尾没有换行符或任何东西。我不喜欢这种方法,因为打印到同一终端的消息(例如,没有重定向的stderr)出现在行的末尾,而不是新的
如果我将\r
放在进度显示的末尾,其他消息(均以\n
结尾)将在视觉上覆盖进度显示,如果长度小于该值,则会与剩余内容混淆。此外,我不想/无法调整打印这些其他消息的行,因为其中一些来自外部库
如果以后我的进度显示会继续显示在新行上,我没有问题,但我希望其他消息会显示在它们自己的行上(大部分是错误消息,但我正在尝试尽可能优雅地恢复,因此该过程大部分时间都会继续)
有什么想法吗
我不需要可移植性,如果它只在LinuxBash上运行,我也可以
Upd:为了更好地了解我的要求:
目前我可以做:
status1ERR
status2
或
或
或
在最后一个示例中,ERR覆盖了一个完整的状态行-我知道我可以用前面提到的VT100字符序列清除行,但我无法更改某些错误消息,因此它需要始终使用
错误消息\n
哇。这是我过去的一次爆炸
可以使用ANSI或VT100字符序列进行光标定位。
这将允许您在屏幕上分离输出类型。
这是一个很好的起始页:只需在错误消息的开头使用一个
\n
。当然,如果您调用其他生成stderr输出的代码,则此功能将不起作用。使用“status,\r\n”打印状态行。然后,使用“光标向上,状态,\r\n”。也考虑过这一点,但如果出现错误,我会用下一个状态自动覆盖它。在这种情况下:(我已经在使用VT100字符序列来擦除该行(在我的问题中;)-因此,虽然您的答案很好,但它并没有回答我的问题:(让我重新表述一下:我将如何使用这些字符序列来完成我要求的任务?在发送输出之前,使用光标向上、向下、向前、向后命令来定位光标。将状态和输出放在屏幕上的不同位置,你应该会很好。是的,这是我想要实现的,但我将如何做到这一点t?正如您在我的示例中所看到的,我已经尝试了我能想到的各种方法,但它们并没有引导我达到想要的行为。这正是问题所在-我无法控制所有错误消息。然后您可以自己捕获stderr,向stdout输出一个\n
,只是将其回显到原始stderr(肮脏的伎俩).对于这样一个简单的问题来说,听起来有很多麻烦-而且,如果中间的部分可能因为任何原因而失败,那将是它自己的问题。我真的无法想象没有简单的解决方案?
ERRtus1
status2
status1
status2 <--- ERR is overriden by status2 here
status1
ERR
status2
ERR
status2