Rust教程没有解释如何从命令行获取参数。在所有示例中,< code>fn main()只显示了一个空参数列表。
从 main
访问命令行参数的正确方法是什么?
Rust在getopts板条箱中具有getopt
风格的CLI参数解析。
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());
自述文件和文档有很多完整的工作示例。
声明:我是这个库的作者之一。
您可以使用std::env::args
或std::env::args_os
函数来访问命令行参数。两个函数都返回参数的迭代器。前者遍历String
s(易于使用),但如果其中一个参数无效,则会恐慌。后者遍历OsString
s,从不恐慌。
请注意,迭代器的第一个元素是程序本身的名称(这是所有主要操作系统中的惯例),因此第一个参数实际上是第二个迭代元素。
处理< 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上找到用于解析命令行参数的库:
在许多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): 命令行: 输出: