我最近用 C++ 实现了一个进度条类。我写了类似的东西
cout << "\r" << percentage_done << "%" << flush;
现在我正在运行一些程序将输出管道化到 less。 问题是 less 向我显示了很多类型的行
^M1%^M2%...
所以“\r”没有被正确解释。是否有可能以这种方式进行管道传输 那 less 只会显示最后的 100% 行,还是我必须在我的程序中添加一个开关 完全禁用进度条?
当我将输出直接通过管道传输到文件时,我遇到了同样的问题,所以输出文件 不必要地占用大量磁盘空间。
最佳答案
This approach在没有额外选项的情况下,使用较少的管道工作正常。它通常适用于任何类型的输出重定向。
而且您不必按照其他方法的建议检查 is_terminal:
#include <boost/progress.hpp>
#include <boost/timer.hpp>
#include <vector>
int main(int argc,char *argv[])
{
const unsigned long expected_count=20;
boost::progress_display show_progress( expected_count );
for(int i=0;i!=expected_count;++i)
{
volatile std::vector<int> v(1024*1024*128);
++show_progress;
}
return 0;
}
输出是:
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
标尺在 progress_display 构造函数中打印。
然后进度条在++show_progress上逐渐被*填满;
关于c++ - linux 终端中的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13070105/