27 个版本

使用旧的 Rust 2015

0.2.21 2019 年 8 月 19 日
0.2.19 2019 年 5 月 2 日
0.2.18 2018 年 7 月 5 日
0.2.17 2018 年 1 月 25 日
0.1.0 2014 年 12 月 13 日

173命令行界面

Download history 224030/week @ 2024-03-14 246145/week @ 2024-03-21 231679/week @ 2024-03-28 234325/week @ 2024-04-04 234482/week @ 2024-04-11 236238/week @ 2024-04-18 223908/week @ 2024-04-25 230315/week @ 2024-05-02 220787/week @ 2024-05-09 242133/week @ 2024-05-16 251548/week @ 2024-05-23 260217/week @ 2024-05-30 243942/week @ 2024-06-06 248917/week @ 2024-06-13 248264/week @ 2024-06-20 204192/week @ 2024-06-27

992,798 每月下载量
用于 1,407 个 Crates(直接使用 466 个)

MIT/Apache

72KB
2K SLoC

getopts

用于 CLI 工具的 Rust 选项解析库。

文档

使用方法

将此添加到您的 Cargo.toml

[dependencies]
getopts = "0.2"

lib.rs:

简单的 getopt 替代方案。

通过使用 reqoptoptoptoptflag 或从组件构建它们来构建选项向量,并将其传递给 getopts,同时传递一个实际的参数向量(不包括 argv[0])。您将得到一个失败代码或匹配项。您必须验证匹配项中的 'free' 参数数量是否符合预期。使用 opt_* 访问器从匹配对象中获取参数值。

单字符选项应出现在命令行上,前面只有一个连字符;多字符选项应有两个连字符开头。需要参数的选项接受它们的参数,后面可以是空格或等号。单字符选项不需要空格。

使用方法

此 crate 位于 crates.io 上,可以通过将 getopts 添加到项目 Cargo.toml 中的依赖项来使用。

[dependencies]
getopts = "0.2"

并添加到您的 crate 根目录

extern crate getopts;

示例

以下示例显示了需要指定输入文件的应用程序的简单命令行解析,接受在 -o 后的可选输出文件名,并接受 -h--help 作为可选标志。

extern crate getopts;
use getopts::Options;
use std::env;

fn do_work(inp: &str, out: Option<String>) {
    println!("{}", inp);
    match out {
        Some(x) => println!("{}", x),
        None => println!("No Output"),
    }
}

fn print_usage(program: &str, opts: Options) {
    let brief = format!("Usage: {} FILE [options]", program);
    print!("{}", opts.usage(&brief));
}

fn main() {
    let args: Vec<String> = env::args().collect();
    let program = args[0].clone();

    let mut opts = Options::new();
    opts.optopt("o", "", "set output file name", "NAME");
    opts.optflag("h", "help", "print this help menu");
    let matches = match opts.parse(&args[1..]) {
        Ok(m) => { m }
        Err(f) => { panic!(f.to_string()) }
    };
    if matches.opt_present("h") {
        print_usage(&program, opts);
        return;
    }
    let output = matches.opt_str("o");
    let input = if !matches.free.is_empty() {
        matches.free[0].clone()
    } else {
        print_usage(&program, opts);
        return;
    };
    do_work(&input, output);
}

依赖项

~300–490KB