25 个版本
0.13.7 | 2023年12月22日 |
---|---|
0.13.6 | 2022年11月29日 |
0.13.5 | 2021年2月4日 |
0.13.4 | 2020年4月13日 |
0.1.0 | 2016年2月20日 |
7 在 开发工具 中排名 #7
348,463 每月下载量
在 313 个 Crates 中使用 (直接使用 155 个)
105KB
1.5K SLoC
duct.rs
Duct 是一个用于运行子进程的库。Duct 使得构建管道和重定向 IO 如同在 shell 中一样简单。同时,Duct 帮助你编写正确、可移植的代码:空白字符永远不会影响意义,子进程的错误默认会被报告,并且为你处理了各种 坑点、错误和平台不一致性。
示例
运行命令而不捕获任何输出。这里 "hi" 直接打印到终端
use duct::cmd;
cmd!("echo", "hi").run()?;
捕获命令的标准输出。这里 "hi" 返回为一个 String
let stdout = cmd!("echo", "hi").read()?;
assert_eq!(stdout, "hi");
捕获管道的标准输出
let stdout = cmd!("echo", "hi").pipe(cmd!("sed", "s/i/o/")).read()?;
assert_eq!(stdout, "ho");
将标准错误合并到标准输出中,并增量读取两者
use duct::cmd;
use std::io::prelude::*;
use std::io::BufReader;
let big_cmd = cmd!("bash", "-c", "echo out && echo err 1>&2");
let reader = big_cmd.stderr_to_stdout().reader()?;
let mut lines = BufReader::new(reader).lines();
assert_eq!(lines.next().unwrap()?, "out");
assert_eq!(lines.next().unwrap()?, "err");
默认情况下,退出状态非零的子进程返回错误
let result = cmd!("false").run();
assert!(result.is_err());
let result = cmd!("false").unchecked().run();
assert!(result.is_ok());
依赖关系
~0–7MB
~40K SLoC