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

Download history • Rust 包仓库 79667/week @ 2024-04-22 • Rust 包仓库 78408/week @ 2024-04-29 • Rust 包仓库 80317/week @ 2024-05-06 • Rust 包仓库 83197/week @ 2024-05-13 • Rust 包仓库 77028/week @ 2024-05-20 • Rust 包仓库 76762/week @ 2024-05-27 • Rust 包仓库 80255/week @ 2024-06-03 • Rust 包仓库 75817/week @ 2024-06-10 • Rust 包仓库 80514/week @ 2024-06-17 • Rust 包仓库 80897/week @ 2024-06-24 • Rust 包仓库 71369/week @ 2024-07-01 • Rust 包仓库 76271/week @ 2024-07-08 • Rust 包仓库 77929/week @ 2024-07-15 • Rust 包仓库 87968/week @ 2024-07-22 • Rust 包仓库 90313/week @ 2024-07-29 • Rust 包仓库 88020/week @ 2024-08-05 • Rust 包仓库

348,463 每月下载量
313 个 Crates 中使用 (直接使用 155 个)

MIT 许可证

105KB
1.5K SLoC

duct.rs Actions 状态 crates.io docs.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