📅  最后修改于: 2023-12-03 15:04:57.566000             🧑  作者: Mango
在 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 解析选项,如 clap
和 structopt
。
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
是另一个解析命令行选项的别名。
添加依赖:
[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"