4.2 rust 命令行参数
2024-09-06 08:27:40
从命令行读取参数
use std::env; fn main() {
let args: Vec<String> = env::args().collect();
println!("{:?}", args);
}
ai@aisty:/opt/wks/rust/rfil/rcmd/target/debug$ ./rcmd aa bb cc
["./rcmd", "aa", "bb", "cc"]
第一个参数是命令本身
The
args
Function and Invalid UnicodeNote that
std::env::args
will panic if any argument contains invalid Unicode. If your program needs to accept arguments containing invalid Unicode, usestd::env::args_os
instead. That function returns an iterator that producesOsString
values instead ofString
values. We’ve chosen to usestd::env::args
here for simplicity, becauseOsString
values differ per platform and are more complex to work with thanString
values.
索引为0的参数是命令本身,从索引为1的参数开始才是输入的参数
use std::env; fn main() {
let args: Vec<String> = env::args().collect(); let query = &args[1];
let filename = &args[2]; println!("Searching for {}", query);
println!("In file {}", filename);
}
ai@aisty:/opt/wks/rust/rfil/rcmd$ cargo run name /tmp/aa.txt
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/rcmd name /tmp/aa.txt`
Searching for name
In file /tmp/aa.txt
读取指定的文件内容
use std::env;
use std::fs; fn main() {
let args: Vec<String> = env::args().collect(); let filename = &args[1];
println!("In file {}", filename); let contents = fs::read_to_string(filename)
.expect("Something went wrong reading the file"); println!("With text:\n{}", contents); }
ai@aisty:/opt/wks/rust/rfil/rcmd$ cargo run /tmp/aa.txt
Compiling rcmd v0.1.0 (/opt/wks/rust/rfil/rcmd)
Finished dev [unoptimized + debuginfo] target(s) in 0.21s
Running `target/debug/rcmd /tmp/aa.txt`
In file /tmp/aa.txt
With text:
aa
use std::env;
use std::fs; fn main() {
let args: Vec<String> = env::args().collect(); let (query, filename) = parse_config(&args); // --snip-- println!("Searching for {}", query);
println!("In file {}", filename); let contents = fs::read_to_string(filename)
.expect("Something went wrong reading the file"); println!("With text:\n{}", contents);
} fn parse_config(args: &[String]) -> (&str, &str) {
let query = &args[1];
let filename = &args[2]; (query, filename)
}
ai@aisty:/opt/wks/rust/rfil/rcmd$ cargo run aa /tmp/aa.log
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/rcmd aa /tmp/aa.log`
Searching for aa
In file /tmp/aa.log
With text:
aa
bb
use std::env;
use std::fs; fn main() {
let args: Vec<String> = env::args().collect(); let config = parse_config(&args); println!("Searching for {}", config.query);
println!("In file {}", config.filename); let contents = fs::read_to_string(config.filename)
.expect("Something went wrong reading the file"); println!("With text:\n{}", contents);
} struct Config {
query: String,
filename: String,
} fn parse_config(args: &[String]) -> Config {
let query = args[1].clone();
let filename = args[2].clone(); Config { query, filename }
}
clone性能不好,后面会介绍其他方式
There’s a tendency among many Rustaceans to avoid using clone
to fix ownership problems because of its runtime cost.
use std::env;
use std::fs; fn main() {
let args: Vec<String> = env::args().collect(); let config = Config::new(&args); println!("Searching for {}", config.query);
println!("In file {}", config.filename); let contents = fs::read_to_string(config.filename)
.expect("Something went wrong reading the file"); println!("With text:\n{}", contents); } struct Config {
query: String,
filename: String,
} impl Config {
fn new(args: &[String]) -> Config {
let query = args[1].clone();
let filename = args[2].clone(); Config { query, filename }
}
}
添加自定义错误
use std::env;
use std::fs; fn main() {
let args: Vec<String> = env::args().collect(); let config = Config::new(&args); println!("Searching for {}", config.query);
println!("In file {}", config.filename); let contents = fs::read_to_string(config.filename)
.expect("Something went wrong reading the file"); println!("With text:\n{}", contents); } struct Config {
query: String,
filename: String,
} impl Config {
fn new(args: &[String]) -> Config {
if args.len() < 3 {
panic!("not enough arguments");
} let query = args[1].clone();
let filename = args[2].clone(); Config { query, filename }
}
}
Returning a Result
from new
Instead of Calling panic!
最新文章
- Nacl开发
- 【集合框架】JDK1.8源码分析之LinkedHashMap(二)
- robots.txt文件没错,为何总提示封禁
- 通过SSIS监控远程服务器Windows服务并发送邮件报警!
- Hash哈希(二)一致性Hash(C++实现)
- Android之Fragment(二)
- VS 2010 WebSite网站 使用CodeBehide 方式开发[Web应用程序项目转Web网站]
- 获取contenteditable的内容 对html进行处理 兼容 chrome、IE、Firefox
- html5视频小站
- springmvc配置aop
- iOS开发——自定义进度圆环
- 基于ES6模块标准通过webpack打包HTM5项目
- windows环境下,anoconnda安装tensorflow
- bzoj 4873: [Shoi2017]寿司餐厅 [最小割]
- 通过WMI获取机器信息
- Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to ;XX.XX.XX.XX:6379] with root cause
- Maven之setting.xml配置文件详解
- [CodeForces - 197B] B - Limit
- 杂谈---这些大忌,你在面试的时候发生过吗?(NO.1)
- synchronized修饰方法和对象的区别
热门文章
- Zabbix webhook 自定义报警媒介
- idea如何在终端使用git并解决终端中文乱码
- uni-app map组件关于marker标记点动态设置的问题
- 南大《软件分析》课程笔记——Intermediate Representation
- 一个校验接口引发的思考--我真的了解Response吗
- blazor wasm开发chrome插件
- Databend 设计概述 | 白皮书
- Python爬虫中的URLError\HTTPError异常类,异常的抛出
- 《手把手教你》系列技巧篇(四十四)-java+ selenium自动化测试-处理https 安全问题或者非信任站点-下篇(详解教程)
- [luogu7740]机器人游戏