许多命令行工具可让您-
用于标准输入或标准输出。在 Rust 中是否有一种惯用的方式来支持它?
处理命令行参数的最常用方法似乎是clap
. 如果我只想处理路径而不想要特殊情况-
,我可以使用
use std::fs::File;
use std::io::Write;
use std::path::PathBuf;
use clap::Parser;
#[derive(clap::Parser, Debug)]
struct Args {
#[clap(parse(from_os_str))]
output: PathBuf,
}
fn main() -> std::io::Result<()> {
let args = Args::parse();
let mut file = File::create(args.output)?;
file.write_all(b"Hello, world!")?;
Ok(())
}
然而,要处理-
成为标准输出的情况,它就更复杂了。now的类型file
必须是Box<dyn Write>
因为stdout()
不是 a File
,而且正确设置它有点复杂。不难,但是那种需要多次复制并且容易搞砸的样板。
有没有一种惯用的方法来处理这个问题?