command-line - 如何访问 Rust 中的命令行参数?

标签 command-line rust

Rust tutorial没有解释如何从命令行获取参数。 fn main() 在所有示例中仅显示为空参数列表。

main 访问命令行参数的正确方法是什么?

最佳答案

您可以使用 std::env::args 访问命令行参数或 std::env::args_os功能。这两个函数都返回参数上的迭代器。前者遍历 String(易于使用),但如果其中一个参数不是有效的 unicode,则会出现 panic 。后者遍历 OsString 并且从不 panic 。

请注意,迭代器的第一个元素是程序本身的名称(这是所有主要操作系统中的约定),因此第一个参数实际上是第二个迭代元素。

处理 args 结果的一种简单方法是将其转换为 Vec:

use std::env;

fn main() {
    let args: Vec<_> = env::args().collect();
    if args.len() > 1 {
        println!("The first argument is {}", args[1]);
    }
}

您可以使用整个 standard iterator toolbox处理这些论点。例如,只检索第一个参数:

use std::env;

fn main() {
    if let Some(arg1) = env::args().nth(1) {
        println!("The first argument is {}", arg1);
    }
}

您可以在 crates.io 上找到图书馆用于解析命令行参数:

  • docopt : 您只需编写帮助信息,解析代码就会为您生成。
  • clap :您描述了要使用流畅的 API 解析的选项。比 docopt 更快,并为您提供更多控制权。
  • getopts : 流行的 C 库的端口。更低的级别和更多的控制权。
  • structopt :建立在 clap 之上,使用起来更符合人体工程学。

关于command-line - 如何访问 Rust 中的命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15619320/

相关文章:

open-source - 最好的命令行时间跟踪应用程序?

bash - Go migrate 不会安装在 MacOS 上

命令行输入作为参数

Java 从命令行调用列表文件

unit-testing - 如何在 Rust 中模拟特定方法而不是所有方法?

rust - 如何向已经有状态的 NEAR Rust 智能合约添加新属性?

serialization - 从匹配表达式返回任意 Encodable?

haskell - 来自命令行的 GHCi 指令

string - 如何将字符串传递给 HashSet 包含?

rust - 迭代 std::fs::ReadDir 并仅从路径获取文件名