📜  rust argv - Rust (1)

📅  最后修改于: 2023-12-03 15:04:57.566000             🧑  作者: Mango

Rust argv - 解析命令行参数

在 Rust 中,可通过 std::env 模块轻松地解析命令行参数。这在编写命令行应用程序时非常有用。

获取命令行参数

要获取命令行参数,使用 args 函数:

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();
    println!("{:?}", args);
}

输出示例:

["myprogram", "arg1", "arg2"]

第一个参数是可执行文件的名字。

获取特定参数

对于特定的参数,可以使用 nth 函数:

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();
    let arg1 = &args[1];
    println!("The second argument is {}", arg1);
}
解析命令行选项

Rust 标准库中没有内置的命令行选项解析器,但是可以使用第三方 crate 解析选项,如 clapstructopt

使用 clap

clap 是一个非常流行的解析命令行选项的 crate。

添加依赖:

[dependencies]
clap = "3.0.0-beta.2"

示例代码:

use clap::{App, Arg};

fn main() {
    let matches = App::new("myapp")
        .version("1.0")
        .author("Author Name")
        .about("Description of myapp")
        .arg(
            Arg::new("input")
                .about("Sets the input file to use")
                .required(true)
                .index(1),
        )
        .arg(
            Arg::new("output")
                .about("Sets the output file to use")
                .required(true)
                .index(2),
        )
        .get_matches();

    let input_file = matches.value_of("input").unwrap();
    let output_file = matches.value_of("output").unwrap();

    println!("Using input file: {}", input_file);
    println!("Using output file: {}", output_file);
}

在命令行运行程序时,指定输入和输出文件:

$ myapp input.txt output.txt
Using input file: input.txt
Using output file: output.txt
使用 structopt

structopt 是另一个解析命令行选项的别名。

添加依赖:

[dependencies]
structopt = "0.3.21"

示例代码:

use structopt::StructOpt;

#[derive(StructOpt)]
struct Cli {
    #[structopt(parse(from_os_str))]
    input: std::path::PathBuf,
    #[structopt(parse(from_os_str))]
    output: std::path::PathBuf,
}

fn main() {
    let args = Cli::from_args();

    println!("Using input file: {:?}", args.input);
    println!("Using output file: {:?}", args.output);
}

在命令行运行程序时,指定输入和输出文件:

$ myapp input.txt output.txt
Using input file: "input.txt"
Using output file: "output.txt"