如何在Rust中处理命令行参数和环境变量

 更新时间:2023年12月04日 10:17:43   作者:二进制空间安全  
在本章节中, 我们探讨了Rust处理命令行参数的常见的两种方式和处理环境变量的两种常见方式,感兴趣的朋友一起看看吧
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

1.摘要

Rust的命令行和环境变量处理在标准库中提供了一整套实现方法, 在本文中除了探索标准库的使用方法之外, 也在不断适应Rust独有的语法特点。在本文中, 我们通过标准库函数的返回值熟悉了迭代器的使用方法, 操作迭代器精确控制保存的内容, 包括字符串和键值对的使用方法。

2.读取参数值

在Rust编程中要读取命令行参数的值, 标准库提供了一个函数: std::env::args, 该函数返回一个传递给命令行参数的迭代器, 迭代器中保存了所有参数内容, 调用者需要调用collect方法将其转换成一个集合, 先看一段示例代码:

use std::env;
?
fn main() {
    let args: Vec<String> = env::args().collect();
    dbg!(args);
}

在上面的代码中, 首先使用use语句将std::env模块引入作用域以便使用它的args函数。然后调用其collect()方法, 该方法将接收命令行所有参数内容并保存到变量args中, 接着使用dbg!宏打印了args的内容。

现在将这段代码编译执行会发现没有任何内容输出, 这是因为执行运行没有参数信息, 现在我们设计一个场景, 通过search参数来搜索一个文件, 完整命令如下:

cargo run -- search filename.txt

注意: 参数符号"--"与参数名之间有空格。

执行结果如下:

从返回的结果来看, 集合中保存了三个参数, 实际上第一个参数是我们二进制文件名称, 这跟C语言中的参数列表的行为很类似, 除了获取到调用的程序名称, 还包括所有以空格隔开的参数名称。

3.将参数值保存到变量

在上面的例子中, 参数内容保存到了args变量中, 下面修改一下程序,代码如下:

use std::env;
?
fn main() {
    let args: Vec<String> = env::args().collect();
    let param_name = &args[1];
    let file_name = &args[2];
    println!("第一个参数名:{}", param_name);
    println!("第二个参数名:{}", file_name);
}

在上面的代码中, 我们根据数组索引来取变量名称, 例如: args[0]对应是集合中的第一个元素, 也就是二进制程序名, 这个不是我们需要的, 如果要取参数search的内容, 使用args[1], 取文件名使用args[2], 以此类推。

执行结果如下:

通过不同的变量分别接收不同的参数名, 在程序后面的逻辑中, 就可以使用这些保存独立参数的变量名了。

4.处理环境变量

在std::env模块中, 标准库同样提供了获取环境变量的函数,为: env::vars(), 下面的代码将把我这台电脑的环境变量全部打印出来:

use std::env;
?
fn main() {
    for (key, value) in env::vars() {
        println!("{} => {}", key, value);
    }
}

同样, env::vars()返回的也是一个迭代器, 不同的是, 数据结构是以key:value对的形式保存, 程序中分别将key和value进行打印:

下面我们在程序中增加一项功能, 因为打印的参数实在太多, 我想把Path环境变量的内容打印出来该怎么做呢?,修改以下代码:

use std::env;
?
fn main() {
    let search_key = "PATH";
    match env::var(search_key) {
        Ok(val) => {
            println!("PATH变量保存的内容为:{}", val);
        },
        Err(e) => println!("无法找到key:{}, 错误为:{}", search_key, e)
    }
}

在上面的代码中, 我定义了一个需要搜索的Key名为"PATH", 并使用match正则直接在env::var()的返回迭代器中搜索Key名,这里env::var(param)为什么可以接收参数呢? 进入env.rs源码可以看到以下代码:

env::var()接收需要搜索的Key,返回了一个Result<T, E>类型, 上面还给了一个使用的示例。

从env:var()函数内部,我们可以看到返回的是一个Result<String, VarError>类型,因此,如果获取成功,在Ok()宏中可以设置参数接收结果,而使用Err()宏接收可能因失败返回的错误, 先看下成功的情况, 打印PATH环境变量内容如下:

现在再看一个搜索失败的情况, 将要搜索的key的内容修改为: "SUNTIGER", 执行结果如下:

此时将走另一个流程, 利用Err()宏打印错误信息。

除此之外, std::env包中还包含其他的一些方法, 例如:设置环境变量:set_var()、删除当前运行进程的环境变量:remove_var()等,感兴趣的可以查看Rust的官方文档, 这里不再赘述。

5.总结

在本章节中, 我们探讨了Rust处理命令行参数的常见的两种方式和处理环境变量的两种常见方式, 抛开Rust的语法, 实际上在命令行参数的处理方式上, 与其它语言大同小异, 可能影响我们习惯的也就只剩下语法。Rust在某些机制实现上跟Go语言比起来可能略显繁琐, 但我们在学习任何语言的时候首先要想到每种编程语言的主要特点, 例如: Go语言主打一个语法简洁和高并发, 因此学习Go语言上手感觉特别快, 而且在处理高并发过程中, Go语言的协程和通道使用起来特别容易,性能也非常不错。而Rust的主打特点是内存安全, 要将这种安全思想贯穿全局, Rust会强行转换使用它的每个人的编程思想, 而Rust编译器就像映射的镜子, 任何不好的编程习惯和疏忽换来的都是红色的错误提示。

到此这篇关于在Rust中处理命令行参数和环境变量的文章就介绍到这了,更多相关https://blog.csdn.net/suntiger/article/details/134671348内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

您可能感兴趣的文章:

相关文章

  • 一文弄懂rust生命周期

    一文弄懂rust生命周期

    生命周期是Rust语言中的一个概念,用于决内存安全问题,本文主要介绍了一文弄懂rust生命周期,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Rust应用调用C语言动态库的操作方法

    Rust应用调用C语言动态库的操作方法

    这篇文章主要介绍了Rust应用调用C语言动态库,本文记录了笔者编写一个简单的C语言动态库,并通过Rust调用动态库导出的函数,需要的朋友可以参考下
    2023-01-01
  • Rust中HashMap类型的使用详解

    Rust中HashMap类型的使用详解

    Rust中一种常见的集合类型是哈希映射,本文主要介绍了Rust中HashMap类型的使用详解,包含创建访问修改遍历等,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Rust中into和from用法及区别介绍

    Rust中into和from用法及区别介绍

    这篇文章主要介绍了Rust中的?into和from使用及区别介绍,into和from是Rust语言中两个用于类型转换的函数,它们分别属于Into和From这两个trait,本文通过实例代码详细讲解,需要的朋友可以参考下
    2023-04-04
  • Rust循环控制结构用法详解

    Rust循环控制结构用法详解

    Rust提供了多种形式的循环结构,每种都适用于不同的场景,在Rust中,循环有三种主要的形式:loop、while和for,本文将介绍Rust中的这三种循环,并通过实例展示它们的用法和灵活性,感兴趣的朋友一起看看吧
    2024-02-02
  • Rust语言之Prometheus系统监控工具包的使用详解

    Rust语言之Prometheus系统监控工具包的使用详解

    Prometheus?是一个开源的系统监控和警报工具包,最初是由SoundCloud构建的,随着时间的发展,Prometheus已经具有适用于各种使用场景的版本,为了开发者方便开发,更是有各种语言版本的Prometheus的开发工具包,本文主要介绍Rust版本的Prometheus开发工具包
    2023-10-10
  • 使用Rust制作康威生命游戏的实现代码

    使用Rust制作康威生命游戏的实现代码

    这篇文章主要介绍了使用Rust制作康威生命游戏,初始rust项目,使用wasm的项目模板,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 一文详解Rust中的错误处理

    一文详解Rust中的错误处理

    这篇文章主要为大家详细介绍了Rust中的错误处理的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • Rust 函数详解

    Rust 函数详解

    函数在 Rust 语言中是普遍存在的。Rust 支持多种编程范式,但更偏向于函数式,函数在 Rust 中是“一等公民”,函数可以作为数据在程序中进行传递,对Rust 函数相关知识感兴趣的朋友一起看看吧
    2021-11-11
  • Rust?搭建一个小程序运行环境的方法详解

    Rust?搭建一个小程序运行环境的方法详解

    rust是一门比较新的编程语言,2015年5月15日,Rust编程语言核心团队正式宣布发布Rust?1.0版本,本文给大家介绍Rust?搭建一个小程序运行环境,以iOS?为例介绍开发环境的准备,感兴趣的朋友跟随小编一起看看吧
    2022-05-05

最新评论


http://www.vxiaotou.com