c++ - linux 终端中的进度条

标签 c++ shell pipe

我最近用 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/

相关文章:

shell - 列出 TCL 中所有源文件的命令

linux - 如何将远程文件 CURL 到远程服务器

shell - bash中日期乘以分钟

linux - Bash 子 shell 使用父进程的标准输入

c++ - 可变参数被破坏/无效的原因

c++ - printf 对待 *p++ 的方式与对待 p 的方式不同

php - 通过管道 $_POST 到外部命令

c - 当管道就位并覆盖了 stdout 和 stderr 时,printf 去哪里了?

c++ - QInputDialog.getItem() 获取项目索引

c++ - 如何初始化和填充 vector<vector<int>> 类型的 vector ?