2 个不稳定版本
0.2.0 | 2024 年 7 月 7 日 |
---|---|
0.1.0 | 2024 年 7 月 7 日 |
#5 在 #cli-input
每月 下载 28 次
8KB
82 行
linedance
从 stdin 或 CLI 提供的文件名读取行。
此功能类似于 Python 中的 fileinput
模块。
用法
在 example
目录中有一个示例文件,展示了如何在您的项目中使用它。这是示例代码
// examples/simple_usage.rs
use linedance::input;
fn main() -> std::io::Result<()> {
for line in input()? {
println!("{}", line?);
}
Ok(())
}
首先构建这个示例,以便我们可以直接运行它。(使用 cargo run
测试 stdin 和 CLI 参数会变得很繁琐。)
cargo build --example simple_usage
二进制文件 simple_usage
位于 target/debug/examples
目录中。在 example
目录中还有一个文本文件,您可以使用它来测试程序,文件名为 data.txt
。
首先,我们将展示如何使用 stdin 作为输入源
echo examples/data.txt | ./target/debug/examples/simple_usage
This is the first message
This is a test message
This is the last message
现在,我们将展示如何使用文件作为输入源
./target/debug/examples/simple_usage --files example/data.txt
输出将与上一个示例相同。
当与 --files
标志一起使用时,程序将读取 CLI 提供的所有文件的行。这允许它与 shell 通配符一起使用。
$ ./target/debug/examples/simple_usage --files examples/*.txt
This is the first message
This is a test message
This is the last message
The first of more messages
The middle of the messages
The last of the more messages
如何与 Clap 一起使用
linedance
设计为不使用任何特殊库进行参数解析,因为它是一个简单的工具。但是,如果您想将其与更复杂的 CLI 应用程序一起使用,则可以使用 clap
。
要使用它,或者任何类似的库,基本思想是只是忽略代码中的 --files
CLI 参数。将其留给 linedance 处理。以下是如何做到这一点的示例
-
首先,将
linedance
和clap
都添加到您的Cargo.toml
[dependencies] linedance = "0.1.0" clap = { version = "4.5", features = ["derive"] }
-
在您的
main.rs
中,使用 clap 定义您的 CLI 结构,但将文件处理留给 linedanceuse clap::Parser; use linedance::input; #[derive(Parser)] #[command(name = "myapp")] #[command(about = "An example application using linedance and clap")] struct Cli { #[arg(long, help = "Enable verbose mode")] verbose: bool, #[arg(last = true, help = "Input files")] files: Vec<String>, } fn main() -> std::io::Result<()> { let cli = Cli::parse(); if cli.verbose { println!("Verbose mode enabled"); } for line in input()? { println!("{}", line?); } Ok(()) }
-
运行应用程序时,使用 linedance 提供的
--files
标志指定输入文件$ ./myapp --verbose --files file1.txt file2.txt
或使用 stdin
$ echo "some input" | ./myapp --verbose