使用 Rust 和 Clap 编写命令行工具
wxk1991 Lv5

使用 Rust 和 Clap 编写命令行工具

Rust 很适合写命令行工具:启动快、部署简单、类型安全、跨平台表现稳定。配合 Clap,可以快速构建参数清晰、帮助信息完善的 CLI。


一、安装依赖

1
2
[dependencies]
clap = { version = "4", features = ["derive"] }

derive 功能可以让我们用结构体声明参数。


二、定义参数

1
2
3
4
5
6
7
8
9
10
use clap::Parser;

#[derive(Parser)]
struct Args {
#[arg(short, long)]
name: String,

#[arg(short, long, default_value_t = 1)]
times: u8,
}

short 会生成短参数,例如 -nlong 会生成长参数,例如 --name


三、读取参数

1
2
3
4
5
6
7
fn main() {
let args = Args::parse();

for _ in 0..args.times {
println!("hello {}", args.name);
}
}

运行:

1
cargo run -- --name Rust --times 3

Clap 会自动生成帮助信息:

1
cargo run -- --help

四、增加子命令

复杂工具通常需要子命令:

1
2
3
4
5
#[derive(clap::Subcommand)]
enum Command {
Add { name: String },
List,
}

然后在主参数中挂载:

1
2
3
4
5
#[derive(Parser)]
struct Args {
#[command(subcommand)]
command: Command,
}

五、工程建议

CLI 工具不要把所有逻辑都写在 main.rs。推荐分成三层:

  • 参数解析层:负责 Clap 结构体
  • 命令分发层:负责匹配子命令
  • 业务逻辑层:可单独测试

这样即使以后加配置文件、日志、插件机制,也不会让入口文件变得混乱。