3 个不稳定版本
使用旧的 Rust 2015
0.2.2 | 2016年11月14日 |
---|---|
0.2.1 | 2016年6月1日 |
0.1.0 | 2016年5月31日 |
在 #subprocess 中排名 #28
20KB
451 行
项目要求
该包应该提供一个类似于 Python 的 subprocess.communicate 接口,用于与子进程通信。
传递一个输入 u8 切片,结果应该有两个 Vec,一个用于 stdout,一个用于 stderr。如果子进程的管道无法更改为非阻塞模式,或者事件循环无法激活,则可能会返回错误。
与 Python 接口不同,此接口还支持两个可选参数,分别用于限制 stdout 和 stderr 的最大输出大小。这是为了防止像 /usr/bin/yes 这样的进程消耗所有系统内存,并且有助于推理最大资源消耗。
用法
let process =
Command::new("/bin/cat")
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.spawn().unwrap();
let (ret_stdout, ret_stderr, err) = subprocess_communicate::subprocess_communicate(process, // child subprocess
&TEST_DATA[..], // stdin input
Some(TEST_DATA.len()), // stdout bound
None); // stderr bound (if any)
err.unwrap();
assert_eq!(TEST_DATA.len() - 1, ret_stdout.len());
assert_eq!(0usize, ret_stderr.len());
let mut i : usize = 0;
for item in TEST_DATA[0..TEST_DATA.len()].iter() {
assert_eq!(*item, ret_stdout[i]);
i += 1;
}
依赖关系
~0.6–1MB
~14K SLoC