1. 参数解析

  需要安装clap库,可通过cargo add clap --features derive命令安装

[dependencies]
clap = { version = "4.1.11", features = ["derive"] }

1.1 解析命令行参数

  此应用程序使用 clap 构建器样式描述其命令行界面的结构。文档还提供了另外两种可用的方法去实例化应用程序。在构建器样式中,shortlong 选项控制用户将要键入的标志;short 标志看起来像 -f,long 标志看起来像 --file

use clap::{Arg, Command};

fn main() {
let matches = Command::new("命令行-测试")
.version("0.1.0")
.author("Hackerman Jones <hckrmnjones@hack.gov>")
.about("参数解析教学")
.arg(
Arg::new("file")
.short('f')
.long("file")
// .takes_value(true)
.help("A cool file"),
)
.arg(
Arg::new("num")
.short('n')
.long("number")
// .takes_value(true)
.help("Five less than your favorite number"),
)
.get_matches();

let binding = String::from("a.txt");
let myfile = matches.get_one::<String>("file").unwrap_or(&binding);
println!("传递的文件是: {}", myfile);

let num_str = matches.get_one::<String>("num");
match num_str {
None => println!("不知道你最喜欢的数字是什么。"),
Some(s) => match s.parse::<i32>() {
Ok(n) => println!("你喜欢的数字是 {}.", n + 5),
Err(_) => println!("那不是一个数字! {}", s),
},
}
}
  • 运行命令如下
cargo run -- -f abc.txt -n 100
  • 程序输出结果
传递的文件是: abc.txt
你喜欢的数字是 105.

2. ANSI 终端

  需要安装ansi_term库,可通过cargo add ansi_term命令安装

[dependencies]
ansi_term = "0.12.1"

  ansi_term 中有两种主要的数据结构:ANSIStringStyleStyle 包含样式信息:颜色,是否粗体文本,或者是否闪烁,或者其它样式。还有 Colour 变量,代表简单的前景色样式。ANSIString 是与 Style 配对的字符串。

2.1 打印彩色文本到终端

use ansi_term::Colour;

fn main() {
println!(
"This is {} in color, {} in color and {} in color",
Colour::Red.paint("红色"),
Colour::Blue.paint("蓝色"),
Colour::Green.paint("绿色")
);
}
  • 程序输出结果
This is 红色 in color, 蓝色 in color and 绿色 in color

2.2 终端中的粗体文本

  对于比简单的前景色变化更复杂的事情,代码需要构造 Style 结构体。Style::new() 创建结构体,并链接属性。

use ansi_term::Style;

fn main() {
println!("{} and 这不是", Style::new().bold().paint("这是加粗"));
}
  • 程序输出结果
这是加粗 and 这不是

2.3 终端中的粗体和彩色文本

  Colour 模块实现了许多类似 Style 的函数,并且可以链接方法。

use ansi_term::Colour;
use ansi_term::Style;

fn main() {
println!(
"{}, {} and {}",
Colour::Yellow.paint("这是黄色的"),
Style::new().bold().paint("这是加粗的"),
Colour::Yellow.bold().paint("这是黄色并加粗的")
);
}
  • 程序输出结果
这是黄色的, 这是加粗的 and 这是黄色并加粗的