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 79667/week @ 2024-04-22 78408/week @ 2024-04-29 80317/week @ 2024-05-06 83197/week @ 2024-05-13 77028/week @ 2024-05-20 76762/week @ 2024-05-27 80255/week @ 2024-06-03 75817/week @ 2024-06-10 80514/week @ 2024-06-17 80897/week @ 2024-06-24 71369/week @ 2024-07-01 76271/week @ 2024-07-08 77929/week @ 2024-07-15 87968/week @ 2024-07-22 90313/week @ 2024-07-29 88020/week @ 2024-08-05

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