当前位置: 首页 > 知识库问答 >
问题:

如何在Rust中访问命令行参数?

宋运锋
2023-03-14

Rust教程没有解释如何从命令行获取参数。在所有示例中,< code>fn main()只显示了一个空参数列表。

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

共有3个答案

富昕
2023-03-14

Rust在getopts板条箱中具有getopt风格的CLI参数解析。

丌官炎彬
2023-03-14

Docopt 也可用于 Rust,它从用法字符串中为您生成一个解析器。作为 Rust 中的奖励,可以使用宏来自动生成结构并进行基于类型的解码:

docopt!(Args, "
Usage: cp [-a] SOURCE DEST
       cp [-a] SOURCE... DIR

Options:
    -a, --archive  Copy everything.
")

您可以通过以下方式获得论点:

let args: Args = Args::docopt().decode().unwrap_or_else(|e| e.exit());

自述文件和文档有很多完整的工作示例。

声明:我是这个库的作者之一。

毛宏达
2023-03-14

您可以使用std::env::argsstd::env::args_os函数来访问命令行参数。两个函数都返回参数的迭代器。前者遍历Strings(易于使用),但如果其中一个参数无效,则会恐慌。后者遍历OsStrings,从不恐慌。

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

处理< code>args结果的一个简单方法是将其转换为< code>Vec:

use std::env;

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

您可以使用整个标准迭代器工具箱来处理这些参数。例如,要仅检索第一个参数:

use std::env;

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

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

    < li>docopt:您只需编写帮助消息,解析代码就会自动生成。 < li>clap:您使用fluent API描述想要解析的选项。比docopt更快,并给你更多的控制。 < li>getopts:流行的C库的端口。更低级甚至更多的控制。 < li>structopt:构建于clap之上,使用起来更加符合人体工程学。
 类似资料:
  • 在许多SO问题和bash教程中,我看到我可以通过两种方式访问bash脚本中的命令行参数: 这导致: < code>$*和< code>$@有什么区别?< br >什么时候应该使用前者,什么时候应该使用后者?

  • 问题内容: 我在Windows 7计算机上运行Xampp,想知道是否以及如何通过命令行运行xampp命令。像php phpfile.php这样的命令 任何意见,将不胜感激。 问题答案: 您可以按照其他答案中的说明设置 环境变量 (如此处) 要么 您可以以管理员身份打开“ 开始” >“ CMD ”并编写

  • 问题内容: 如何在Go中访问命令行参数?不会将它们作为参数传递给。 一个完整的程序(可能是通过链接多个程序包创建的)必须具有一个名为main的程序包,并具有一个功能 定义。函数main.main()不带参数,也不返回值。 问题答案: 您可以使用变量访问命令行参数。例如, 您还可以使用flag软件包,该软件包实现命令行标志解析。

  • 问题内容: 在Java中解析命令行参数的好方法是什么? 问题答案: 例如,这是你用来解析2个字符串参数的方法: 从命令行使用:

  • 问题内容: 如果我期望像001或999这样的东西(这次让我们将期望值限制为001 … 999范围),并且传递了其他一些参数,并且想忽略任何意外内容,那么这将是处理命令行参数的简单表达式? 我知道,例如,如果我需要确定是否在参数之间传递了“ debug”,它将像这样: 如何确定是否通过了009或575? 所有这些都是预期的电话: 在这一点上,我不在乎这样的电话: …第一个-由于存在多个“数字”参数;

  • 问题内容: 我正在使用eclipse,因此将运行配置设置为 -Dspring-boot.run.arguments =-person.name = firstName 但是,当运行我的应用程序时,出现异常,因为“无法解析值“ $ {person.name}”中的占位符“ person.name”” 问题答案: 这段代码可以正常工作(Spring Boot 2.1.4): 命令行: 输出: