我正在使用C ++创建一个linux应用程序,它会将信息输出到控制台。程序的某些部分需要一段时间来计算,我想在控制台中添加一个状态栏,类似于wget中使用的状态栏(我将自己的描述放在下面)。
%complete[===========> ] eta
实现这一目标的最佳方法是什么?是否有任何有用的库可以轻松添加此功能?
答案 0 :(得分:5)
如果您的程序类似于wget,也就是说,它基本上是一个批处理程序而不需要全屏UI(我建议ncurses),您可以使用该技巧打印回车你的线后(但不是换行);你写的下一件事将覆盖同一行。
这是一个演示。
#include <iostream>
#include <unistd.h>
int main(void)
{
for (int i = 0; i < 10; i++) {
std::cout << "Status: " << i << "\r" << std::flush;
sleep(1);
}
std::cout << "Completed.\n";
}
答案 1 :(得分:1)
ncurses库应该对您有用。或者你可以用char写入进度线char,使用退格,调用fflush
或std::flush
等。
更简单的方法就是输出点......
答案 2 :(得分:0)
您可以使用 debconf-apt-progress 来运行命令,同时像 apt 一样显示进度行。您的命令需要通过管道 fd 将进度报告回 debconf-apt-progress。我还没有想出如何从 debconf-apt-progress 中提取这个功能。