1 个不稳定版本
| 0.1.0 | 2022年3月13日 |
|---|
在 命令行界面 中排名第550
60KB
853 行代码(不包括注释)
ml-progress
终端/控制台的进度指示器。
- 单行
- 不使用ANSI转义码,仅使用
\r - 后台线程进行及时更新
- 有观点的语法
早期版本 - 这尚未得到适当测试。
用法
- 或者
- 使用
Progress结构体和progress!宏创建(如果您不需要自定义配置),或者 - 使用
ProgressBuilder结构体和progress_builder!宏创建,设置自定义选项,然后使用build方法创建Progress。
- 使用
- 在处理过程中,使用
inc和message方法更新状态。 - 使用以下方法之一完成:
finish、finish_and_clear或finish_at_current_pos。
示例
默认项
use ml_progress::progress;
let progress = progress!(10)?;
for _ in 0..10 {
// std::thread::sleep(std::time::Duration::from_millis(500));
progress.inc(1);
}
progress.finish();
# Ok::<(), ml_progress::Error>(())
##############################-------------------- 6/10 (2s)
自定义项
use ml_progress::progress;
let progress = progress!(
10;
"[" percent "] " pos "/" total " " bar_fill " (" eta_hms ")"
)?;
for _ in 0..10 {
// std::thread::sleep(std::time::Duration::from_millis(500));
progress.inc(1);
}
progress.finish();
# Ok::<(), ml_progress::Error>(())
[ 60%] 6/10 ########################----------------- (0:02)
自定义配置
use ml_progress::progress_builder;
let progress = progress_builder!(
"[" percent "] " pos_group "/" total_group " " bar_fill " (" eta_hms ")"
)
.total(Some(10000))
.thousands_separator(",")
.build()?;
for _ in 0..10 {
// std::thread::sleep(std::time::Duration::from_millis(500));
progress.inc(1000);
}
progress.finish();
# Ok::<(), ml_progress::Error>(())
[ 60%] 6,000/10,000 ###################-------------- (0:02)
项
项与 progress! 和 progress_builder! 宏一起使用。
- 每个项都是一个单个标记(例如
bar_fill)或括号内的多个标记(例如(eta "{:2}{:1}"))。 - 项之间没有分隔符,除了空格。
- 最多允许一个
*_fill项。
摘要
所有可能项的摘要。有关更多详细信息,请参阅下面。
"foo" // "foo"
bar_fill // "######----"
eta // "5m" ; same as (eta "{}{}")
(eta FORMAT NONE) // u64, &str
eta_hms // "5:23"
message_fill // "foo"
percent // " 23%" ; same as (percent "{:3.0}%")
(percent FORMAT NONE) // f64
pos // "1234567" ; same as (pos "{}" )
pos_group // "1 234 567" ; same as (pos "{:#}" )
pos_bin // "1.18 Mi" ; same as (pos_bin "{:#} {}")
pos_dec // "1.23 M" ; same as (pos_dec "{:#} {}")
(pos FORMAT) // u64
(pos_bin FORMAT) // f64, prefix
(pos_dec FORMAT) // f64, prefix
speed // "1234567" ; same as (speed "{:#}" )
speed_int // "1234567" ; same as (speed_int "{}" )
speed_group // "1 234 567" ; same as (speed_int "{:#}" )
speed_bin // "1.18 Mi" ; same as (speed_bin "{:#} {}")
speed_dec // "1.23 M" ; same as (speed_dec "{:#} {}")
(speed FORMAT NONE) // f64
(speed_int FORMAT NONE) // u64
(speed_bin FORMAT NONE) // f64, prefix
(speed_dec FORMAT NONE) // f64, prefix
total // "1234567" ; same as (total "{}" )
total_group // "1 234 567" ; same as (total "{:#}" )
total_bin // "1.18 Mi" ; same as (total_bin "{:#} {}")
total_dec // "1.23 M" ; same as (total_dec "{:#} {}")
(total FORMAT NONE) // u64
(total_bin FORMAT NONE) // f64, prefix
(total_dec FORMAT NONE) // f64, prefix
(|state| EXPR)
格式
- 普通的Rust格式字符串,对特殊处理标志
#"alternate" 进行处理(见下文)。
无
- 当问题的值是
None时,显示的文本值。- 有关值何时为
None,请参阅State的相应函数。
- 有关值何时为
- 这是可选的,可以省略。默认值是空字符串。
前缀
- 以
_bin结尾的项使用基于1024的二元前缀(Ki、Mi、Gi、...)。 - 以
_dec结尾的项使用基于1000的十进制前缀(k、M、G、...)。
如果值低于1024或1000,则前缀为空字符串。
交替格式
当在 FORMAT 中使用 # "alternate" 标志时,根据类型应用以下规则
u64以每三位数字为一组进行格式化。- 可以使用
ProgressBuilder::thousands_separator设置千位分隔符,默认为空格。 - 例如,使用
1234567和"{:#}"时,将显示为"1 234 567"(默认分隔符)。
- 可以使用
f64- 格式
精度(默认:4)被视为 "适合宽度",值将显示最大小数位数,以适应此宽度,如果无法适应,则不带小数。 - 使用
pos_bin、pos_dec、total_bin和total_dec:具有空前缀的金额将不带小数显示。 - 示例
- 使用
1.2345和"{:#}"时,显示为"1.23" - 使用
12.345和"{:#}"时,显示为"12.3" - 使用
123.45和"{:#}"时,显示为"123" - 使用
1234.5和"{:#}"时,显示为"1235" - 使用
12345和"{:#}"时,显示为"12345"
- 使用
- 格式
前缀"{:#}"以原样显示空前缀,并带空格显示其他前缀。
文本
"foo" // "foo"
显示给定的文本字符串。
bar_fill
bar_fill // "######----"
显示进度条,填充行上的剩余空间。
- 如果
total是None,则显示空格。
eta
eta // "5m" ; same as (eta "{}{}")
(eta FORMAT) // u64, &str
(eta FORMAT NONE)
以近似格式显示剩余时间估计:数量和单位,或者不可用时显示 NONE。
- 数量是完整单位数,即它不是四舍五入的。
- 单位可以是
h(小时)、m(分钟)或s(秒)
eta_hms
eta_hms // "12:34:56" "0:56"
以小时/分钟/秒显示剩余时间估计,如果不可用时则显示空字符串。
- 根据大小,格式可以是 H:MM:SS、MM:SS 或 M:SS。
- 值是完整秒数,即它不是四舍五入的。
message_fill
message_fill // "foo"
显示使用 Progress::message 设置的消息,填充行上的剩余空间。
percent
percent // " 23%" ; same as (percent "{:3.0}%")
(percent FORMAT) // f64
(percent FORMAT NONE)
显示完成百分比或如果 total 是 None,则显示 NONE。
pos
pos // "1234567" ; same as (pos "{}" )
pos_group // "1 234 567" ; same as (pos "{:#}" )
pos_bin // "1.18 Mi" ; same as (pos_bin "{:#} {}")
pos_dec // "1.23 M" ; same as (pos_dec "{:#} {}")
(pos FORMAT) // u64
(pos_bin FORMAT) // f64, prefix
(pos_dec FORMAT) // f64, prefix
显示位置。
pos- 作为整数pos_group- 作为整数,以三位一组数字pos_bin- 作为带有二进制前缀的浮点数pos_dec- 作为带有十进制前缀的浮点数
speed
speed // "1234567" ; same as (speed "{:#}" )
speed_int // "1234567" ; same as (speed_int "{}" )
speed_group // "1 234 567" ; same as (speed_int "{:#}" )
speed_bin // "1.18 Mi" ; same as (speed_bin "{:#} {}")
speed_dec // "1.23 M" ; same as (speed_dec "{:#} {}")
(speed FORMAT) // f64
(speed FORMAT NONE)
(speed_int FORMAT) // u64
(speed_int FORMAT NONE)
(speed_bin FORMAT) // f64, prefix
(speed_bin FORMAT NONE)
(speed_dec FORMAT) // f64, prefix
(speed_dec FORMAT NONE)
以每秒步数显示速度或如果速度不可用,则显示 NONE。
speed- 作为浮点数speed_int- 作为整数speed_group- 作为整数,以三位一组数字speed_bin- 作为带有二进制前缀的浮点数speed_dec- 作为带有十进制前缀的浮点数
total
total // "1234567" ; same as (total "{}" )
total_group // "1 234 567" ; same as (total "{:#}" )
total_bin // "1.18 Mi" ; same as (total_bin "{:#} {}")
total_dec // "1.23 M" ; same as (total_dec "{:#} {}")
(total FORMAT) // u64
(total FORMAT NONE)
(total_bin FORMAT) // f64, prefix
(total_bin FORMAT NONE)
(total_dec FORMAT) // f64, prefix
(total_dec FORMAT NONE)
显示总数或如果 total 是 None,则显示 NONE。
total- 作为整数total_group- 作为整数,以三位一组数字total_bin- 作为带有二进制前缀的浮点数total_dec- 作为带有十进制前缀的浮点数
自定义项
(|state| EXPR)
显示给定函数的返回值,该函数接受 State 作为输入并返回 String。
(|s| custom_eta(s)) // "12h 34m 56s"
use ml_progress::State;
fn custom_eta(state: &State) -> String {
if let Some(eta) = state.eta() {
let (h, m, s) = ml_progress::duration_hms(eta);
if h > 0 {
format!("{}h {}m {}s", h, m, s)
} else if m > 0 {
format!("{}m {}s", m, s)
} else {
format!("{}s", s)
}
} else {
"".to_string()
}
}
依赖项
~0.4–6.5MB
~12K SLoC