前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每周一库】 pbr - Terminal progress bar for Rust

【每周一库】 pbr - Terminal progress bar for Rust

作者头像
MikeLoveRust
发布2020-07-02 15:06:36
1.2K0
发布2020-07-02 15:06:36
举报
文章被收录于专栏:Rust语言学习交流

本期的每周一库带来的是一个十分有趣的cli小工具,rust下的cli进度条库 - pbr

先附上库的链接

  • github: Terminal progress bar for Rust
  • docs: Crate pbr

库的简介十分简单,这个库的灵感来自于golang的pb库

github页面上直接提供了示例代码帮助我们快速体验pbr的功能,三个例子分别是

  • 简单用例
  • 多进度条用例
  • 文件拷贝进度条用例

下面我们来体验一下pbr库的使用,测试环境

  • Windows 10
  • cargo --version: cargo 1.45.0-nightly (9fcb8c1d2 2020-05-25)

首先我们在Cargo.toml文件中添加引用pbr = "1.0.3"

简单用例 main.rs代码,我们修改官方例子,使用time::Duration::from_millis(200)实现thread sleep功能

代码语言:javascript
复制
extern crate pbr;

use pbr::ProgressBar;
use std::{thread, time};

fn main() {
    let count = 1000;
    let mut pb = ProgressBar::new(count);
    let duration = time::Duration::from_millis(20);
    pb.format("╢▌▌░╟");
    for _ in 0..count {
        pb.inc();
        thread::sleep(duration);
    }
    pb.finish_print("done");
}

使用命令cargo run运行结果如下

多进度条用例

我们适当修改一下官方的例子,去除掉warning

代码语言:javascript
复制
extern crate pbr;

use std::{thread};
use pbr::MultiBar;
use std::time::Duration;

fn main() {
    let mb = MultiBar::new();
    let count = 100;
    mb.println("Application header:");

    let mut p1 = mb.create_bar(count);
    let _ = thread::spawn(move || {
        for _ in 0..count {
            p1.inc();
            thread::sleep(Duration::from_millis(100));
        }
        // notify the multibar that this bar finished.
        p1.finish();
    });

    mb.println("add a separator between the two bars");

    let mut p2 = mb.create_bar(count * 2);
    let _ = thread::spawn(move || {
        for _ in 0..count * 2 {
            p2.inc();
            thread::sleep(Duration::from_millis(100));
        }
        // notify the multibar that this bar finished.
        p2.finish();
    });

    // start listen to all bars changes.
    // this is a blocking operation, until all bars will finish.
    // to ignore blocking, you can run it in a different thread.
    mb.listen();
}

运行结果

以上就是本期的每周一库

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档